第21章MySQL NDB集群7.5和NDB集群7.6

目录

21.1 NDB群集概述
21.1.1 NDB集群核心概念
21.1.2 NDB群集节点,节点组,副本和分区
21.1.3 NDB集群硬件,软件和组网要求
21.1.4 NDB集群中的新功能
21.1.5使用InnoDB的MySQL服务器与NDB集群的比较
21.1.6 NDB簇的已知限制
21.2 NDB群集安装
21.2.1 NDB集群自动安装程序
21.2.2在Linux上安装NDB集群
21.2.3在Windows上安装NDB群集
21.2.4 NDB集群的初始配置
21.2.5 NDB集群的初始启动
21.2.6带表格和数据的NDB群集示例
21.2.7安全关闭并重新启动NDB群集
21.2.8升级和降级NDB集群
21.3配置NDB集群
21.3.1 NDB集群的快速测试设置
21.3.2 NDB群集配置参数,选项和变量概述
21.3.3 NDB群集配置文件
21.3.4使用与NDB群集的高速互连
21.4 NDB群集计划
21.4.1 ndbd - NDB群集数据节点守护进程
21.4.2 ndbinfo_select_all - 从ndbinfo表中选择
21.4.3 ndbmtd - NDB群集数据节点守护进程(多线程)
21.4.4 ndb_mgmd - NDB群集管理服务器守护进程
21.4.5 ndb_mgm - NDB集群管理客户端
21.4.6 ndb_blob_tool -检查和维修NDB簇表的BLOB和TEXT列
21.4.7 ndb_config - 提取NDB群集配置信息
21.4.8 ndb_cpcd - 自动测试NDB开发
21.4.9 ndb_delete_all - 从NDB表中删除所有行
21.4.10 ndb_desc - 描述NDB表
21.4.11 ndb_drop_index - 从NDB表中删除索引
21.4.12 ndb_drop_table - 删除一个NDB表
21.4.13 ndb_error_reporter - NDB错误报告实用程序
21.4.14 ndb_import - 将CSV数据导入NDB
21.4.15 ndb_index_stat - NDB指数统计工具
21.4.16 ndb_move_data - NDB数据复制实用程序
21.4.17 ndb_perror - 获取NDB错误消息信息
21.4.18 ndb_print_backup_file - 打印NDB备份文件内容
21.4.19 ndb_print_file - 打印NDB磁盘数据文件内容
21.4.20 ndb_print_frag_file - 打印NDB片段列表文件内容
21.4.21 ndb_print_schema_file - 打印NDB架构文件内容
21.4.22 ndb_print_sys_file - 打印NDB系统文件内容
21.4.23 ndb_redo_log_reader - 检查并打印群集重做日志的内容
21.4.24 ndb_restore - 恢复NDB群集备份
21.4.25 ndb_select_all - 从NDB表中打印行
21.4.26 ndb_select_count - 为NDB表打印行计数
21.4.27 ndb_setup.py - 为NDB群集启动基于浏览器的自动安装程序
21.4.28 ndb_show_tables - 显示NDB表的列表
21.4.29 ndb_size.pl - NDBCLUSTER大小需求估计器
21.4.30 ndb_top - 查看NDB线程的CPU使用情况信息
21.4.31 ndb_waiter - 等待NDB集群达到给定状态
21.4.32 NDB群集程序的通用选项 - NDB群集程序的通用选项
21.5 NDB集群的管理
21.5.1 NDB簇起始阶段摘要
21.5.2 NDB集群管理客户端中的命令
21.5.3 NDB集群的在线备份
21.5.4 NDB集群的MySQL服务器使用情况
21.5.5执行NDB群集的滚动重启
21.5.6在NDB集群中生成的事件报告
21.5.7 NDB集群日志消息
21.5.8 NDB集群单用户模式
21.5.9快速参考:NDB集群SQL语句
21.5.10 ndbinfo:NDB群集信息数据库
21.5.11 NDB簇的INFORMATION_SCHEMA表
21.5.12 NDB集群安全问题
21.5.13 NDB集群磁盘数据表
21.5.14在线添加NDB群集数据节点
21.5.15用于NDB群集的分布式MySQL权限
21.5.16 NDB API统计计数器和变量
21.6 NDB群集复制
21.6.1 NDB群集复制:缩写和符号
21.6.2 NDB群集复制的一般要求
21.6.3 NDB群集复制中的已知问题
21.6.4 NDB群集复制架构和表
21.6.5准备用于复制的NDB群集
21.6.6启动NDB群集复制(单个复制通道)
21.6.7使用两个复制通道进行NDB群集复制
21.6.8使用NDB群集复制实现故障转移
21.6.9使用NDB群集复制的NDB群集备份
21.6.10 NDB群集复制:多主复制和循环复制
21.6.11 NDB群集复制冲突解决
21.7 NDB集群发行说明

MySQL NDB集群是适用于分布式计算环境的高可用性,高冗余版本的MySQL。最近的NDB Cluster发行版系列使用NDB存储引擎的第7版(也称为NDBCLUSTER)来启用在群集中运行带有MySQL服务器和其他软件的多台计算机。NDB Cluster 7.5现在作为从版本7.5.4开始的通用可用性(GA)版本提供,包含NDB存储引擎的版本7.5 使用NDB存储引擎版本7.6的NDB Cluster 7.6 现在也作为开发人员预览版提供。以前的GA版本仍可用于生产,NDB 7.3和NDB Cluster 7.4 NDB分别包含版本7.3和7.4。

NDBOracle建立的标准MySQL Server 5.7二进制文件不包含存储引擎的支持相反,来自Oracle的NDB Cluster二进制文件的用户应该升级到支持平台的最新NDB群集二进制版本 - 这些包括适用于大多数Linux发行版的RPM。从源代码构建的NDB群集用户应使用为NDB群集提供的源代码。(本节稍后会列出可以获取源的位置。)

重要

MySQL NDB群集不支持InnoDB群集,必须使用带有InnoDB存储引擎的MySQL Server 5.7 以及未包含在NDB群集分配中的其他应用程序来部署 MySQL Server 5.7二进制文件不能与MySQL NDB群集一起使用。有关部署和使用InnoDB集群的更多信息,请参阅 第20章InnoDB集群第21.1.5节“使用InnoDB与NDB集群相比较的MySQL服务器”讨论了 存储引擎NDBInnoDB存储引擎的区别

本章包含有关通过5.7.22-ndb-7.5.11和NDB Cluster 7.6发布到5.7.22-ndb-7.6.5的NDB Cluster 7.5发行版的信息。NDB Cluster 7.5作为通用版本发布,并推荐用于新部署。NDB Cluster 7.6目前正在开发中,可作为开发前预览评估和测试。NDB集群7.4和NDB集群7.3发布系列是以前的GA版本,仍在生产中支持。NDB Cluster 7.2是以前的GA版本系列,仍然受支持。我们目前建议新的生产部署使用NDB Cluster 7.5。有关NDB集群7.4和NDB集群7.3的更多信息,请参阅 MySQL NDB集群7.3和NDB集群7.4有关NDB Cluster 7.2的信息,请参阅MySQL NDB Cluster 7.2

支持的平台。  NDB集群目前在许多平台上均可用并得到支持。有关操作系统版本,操作系统分发和硬件平台特定组合的确切级别的支持,请参阅 http://www.mysql.com/support/supportedplatforms/cluster.html

可用性。  NDB集群二进制和源代码包可用于支持http://dev.mysql.com/downloads/cluster/的平台

NDB集群版本号。  NDB Cluster遵循与主要的MySQL Server 5.7系列版本有所不同的版本模式。在本 手册和其他MySQL文档中,我们使用以NDB开头的版本号来标识这些和以后的NDB群集版本此版本号是NDBCLUSTER发行版中使用存储引擎的版本号,而不是NDB Cluster版本所基于的MySQL服务器版本号。

NDB Cluster软件中使用的版本字符串。  NDB Cluster程序显示的版本字符串使用以下格式:

mysql- mysql_server_version-ndb-ndb_engine_version

mysql_server_version表示NDB群集版本所基于的MySQL服务器的版本。对于所有NDB Cluster 7.5和NDB Cluster 7.6版本,这是 5.7ndb_engine_versionNDB此NDB群集软件版本使用的存储引擎版本。你可以在mysql客户端看到这种格式,如下所示:

外壳> mysql
欢迎来到MySQL监视器。命令结束于; 或\ g。
你的MySQL连接ID是2
服务器版本:5.7.22-ndb-7.5.11源代码分发

键入'help' 或'\ h'寻求帮助。输入'\ c'清除缓冲区。

MySQL的> SELECT VERSION()\G
*************************** 1. row ******************** *******
VERSION():5.7.22-ndb-7.5.11
一排(0.00秒)

该版本字符串也显示在ndb_mgm 客户端SHOW命令输出中

ndb_mgm> SHOW
连接到管理服务器:localhost:1186
群集配置
---------------------
[ndbd(NDB)] 2节点(s)
id = 1 @ 10.0.10.6(5.7.22-ndb-7.5.11,节点组:0,*)
id = 2 @ 10.0.10.8(5.7.22-ndb-7.5.11,节点组:0)

[ndb_mgmd(MGM)] 1个节点
id = 3 @ 10.0.10.2(5.7.22-ndb-7.5.11)

[mysqld(API)] 2节点(s)
id = 4 @ 10.0.10.10(5.7.22-ndb-7.5.11)
id = 5(未连接,接受来自任何主机的连接)

版本字符串标识NDB群集版本分支的主线MySQL版本以及所用NDB存储引擎的版本 例如,NDB 7.5.4的完整版本字符串(第一个NDB 7.5 GA版本)是mysql-5.7.16-ndb-7.5.4由此我们可以确定以下内容:

新的NDB集群版本根据NDB存储引擎中的更新进行编号 ,并不一定与主线MySQL服务器版本以一对一的方式对应。例如,NDB 7.5.4(如前所述)基于MySQL 5.7.16,而NDB 7.5.3基于MySQL 5.7.13(版本字符串:)mysql-5.7.13-ndb-7.5.3

与标准MySQL 5.7版本兼容。  虽然许多标准的MySQL架构和应用程序可以使用NDB群集工作,但是未修改的应用程序和数据库架构在使用NDB群集运行时可能会略有不兼容或性能不理想(请参见 第21.1.6节“NDB群集的已知限制”)。这些问题中的大多数都可以被克服,但这也意味着您不太可能切换现有的应用程序数据存储 - 例如当前使用的数据存储MyISAMInnoDB- 使用 NDB存储引擎,而不允许在架构,查询和应用程序中进行更改。另外,MySQL服务器和NDB集群代码库差异很大,因此标准 mysqld不能用作NDB集群提供mysqld版本的直接替代品

NDB集群开发源代码树。  NDB集群开发树也可以从https://github.com/mysql/mysql-server进行访问

https://github.com/mysql/mysql-server维护的NDB集群开发资源在 GPL下获得许可。有关使用Git获取MySQL源代码并自行构建它们的信息,请参见 第2.9.3节“使用开发源代码树安装MySQL”

注意

与MySQL Server 5.7一样,NDB Cluster 7.5和NDB Cluster 7.6版本使用CMake构建

NDB Cluster 7.5作为通用可用性(GA)版本提供,建议用于从版本7.5.4开始的新部署。目前正在开发的NDB Cluster 7.6可作为Developer Milestone版本进行评估。NDB集群7.4和NDB集群7.3是以前的GA版本,仍在生产中支持。NDB 7.2是以前的GA版本系列,虽然不再推荐用于新的部署,但它仍受支持。我们目前建议新的生产部署使用NDB 7.5。有关NDB 7.4中添加的主要功能的概述,请参阅 NDB Cluster 7.4中的新功能有关NDB Cluster 7.3的类似信息,请参阅 NDB Cluster 7.3中的新增功能有关以前NDB Cluster版本中添加的主要功能的概述,请参阅 MySQL NDB Cluster 7.2中的新增功能不再开发或维护NDB 7.1和更早版本的NDB集群。

随着NDB集群的不断发展,本章的内容会有所修改。有关NDB Cluster的其他信息可以在MySQL网站 http://www.mysql.com/products/cluster/上找到

其他资源。  有关NDB Cluster的更多信息可以在以下位置找到:

21.1 NDB群集概述

NDB群集是一项技术,可以在无共享系统中对内存数据库进行群集。无共享架构使系统能够使用非常便宜的硬件,并且对硬件或软件的要求最低。

NDB集群被设计为不具有任何单点故障。在无共享系统中,每个组件都需要拥有自己的内存和磁盘,并且不建议或支持使用诸如网络共享,网络文件系统和SAN等共享存储机制。

NDB集群将标准MySQL服务器与名为NDB (它代表N etwork D ata B ase的内存集群存储引擎集成在一起在我们的文档中,该术语NDB指的是存储引擎特有的设置部分,而MySQL NDB集群是指一个或多个MySQL服务器与 NDB存储引擎的组合。

NDB群集由一组称为主机的计算机组成,每个计算机 运行一个或多个进程。这些被称为节点的进程 可能包括MySQL服务器(用于访问NDB数据),数据节点(用于存储数据),一个或多个管理服务器以及可能的其他专用数据访问程序。这些组件在NDB集群中的关系如下所示:

图21.1 NDB群集组件

In this cluster, three MySQL servers (mysqld program) are SQL nodes that provide access to four data nodes (ndbd program) that store data. The SQL nodes and data nodes are under the control of an NDB management server (ndb_mgmd program). Various clients and APIs can interact with the SQL nodes - the mysql client, the MySQL C API, PHP, Connector/J, and Connector/NET. Custom clients can also be created using the NDB API to interact with the data nodes or the NDB management server. The NDB management client (ndb_mgm program) interacts with the NDB management server.

所有这些程序一起组成一个NDB集群(参见 第21.4节“NDB集群程序”)。当数据由 NDB存储引擎存储时,表(和表数据)存储在数据节点中,这些表可直接从因此,在集群中存储数据的工资单应用程序中,如果一个应用程序更新员工的工资,则所有其他查询此数据的MySQL服务器都可以立即看到此更改。

尽管NDB集群SQL节点使用mysqld 服务器守护程序,但它与MySQL 5.7发行版提供mysqld二进制文件在许多关键方面不同 ,而且这两个版本的 mysqld不可互换。

另外,未连接到NDB群集的MySQL服务器不能使用NDB存储引擎,也无法访问任何NDB群集数据。

存储在NDB集群的数据节点中的数据可以镜像; 集群可以处理单个数据节点的故障,而不会产生其他影响,因为由于丢失事务状态而导致少量事务中止。由于交易应用程序预计会处理交易失败,因此这不应该是问题的根源。

单个节点可以停止并重新启动,然后可以重新加入系统(集群)。在进行配置更改和软件升级时使用滚动重新启动(所有节点依次重新启动)(请参见 第21.5.5节“执行NDB群集的滚动重新启动”)。滚动重启也用作在线添加新数据节点的过程的一部分(请参见第21.5.14节“在线添加NDB群集数据节点”)。有关数据节点的详细信息,它们在NDB群集中的组织方式以及它们如何处理和存储NDB群集数据,请参见 第21.1.2节“NDB群集节点,节点组,副本和分区”

备份和恢复NDB集群数据库可以使用 NDBNDB集群管理客户端中的-native功能和NDB集群分发中包含ndb_restore程序完成。有关更多信息,请参见 第21.5.3节“NDB群集的联机备份”第21.4.24节“ ndb_restore - 恢复NDB群集备份”您还可以使用为mysqldump和MySQL服务器提供的标准MySQL功能 有关更多信息请参见 第4.5.4节“ mysqldump - 数据库备份程序”

NDB集群节点可以采用不同的传输机制进行节点间通信; 标准100 Mbps或更快的以太网硬件上的TCP / IP用于大多数实际部署。

21.1.1 NDB集群核心概念

NDBCLUSTER (也称为NDB)是一种内存存储引擎,可提供高可用性和数据持久性功能。

NDBCLUSTER存储引擎可以与一系列故障切换和负载平衡选项进行配置,但最简单的是开始在集群级别的存储引擎。NDB集群的NDB存储引擎包含一组完整的数据,仅取决于集群内部的其他数据。

NDB集群集群部分独立于MySQL服务器进行配置。在NDB集群中,集群的每个部分都被认为是一个 节点

注意

在许多情况下,术语节点用于表示计算机,但在讨论NDB簇时,它意味着一个 过程可以在一台计算机上运行多个节点; 对于运行一个或多个群集节点的计算机,我们使用术语 群集主机

有三种类型的群集节点,并且在最小的NDB群集配置中,至少有三个节点,其中每个节点都是以下类型之一:

  • 管理节点:这类节点的作用是管理NDB集群内的其他节点,执行提供配置数据,启动和停止节点以及运行备份等功能。由于此节点类型管理其他节点的配置,因此应先启动此类节点,然后再启动其他节点。MGM节点以命令ndb_mgmd启动

  • 数据节点:这种类型的节点存储群集数据。数据节点数量与副本数量相同,乘以分段数量(请参见 第21.1.2节“NDB群集节点,节点组,副本和分区”)。例如,有两个副本,每个副本有两个片段,则需要四个数据节点。一个副本足够用于数据存储,但不提供冗余; 因此,建议有2个(或更多)副本提供冗余,从而提高可用性。数据节点以命令ndbd启动 (请参见 第21.4.1节“ ndbd - NDB群集数据节点守护程序”)或 ndbmtd(请参见 第21.4.3节“ ndbmtd - NDB群集数据节点守护进程(多线程)”)。

    NDB簇表通常完全存储在内存中而不是磁盘上(这就是为什么我们将NDB簇称为 内存中数据库的原因)。但是,一些NDB簇数据可以存储在磁盘上; 有关更多信息请参见 第21.5.13节“NDB群集磁盘数据表”

  • SQL节点:这是访问群集数据的节点。对于NDB群集,SQL节点是使用NDBCLUSTER存储引擎的传统MySQL服务器 一个SQL节点是一个mysqld进程,使用--ndbcluster--ndb-connectstring选项开始, 在本章其他地方解释,可能还有其他MySQL服务器选项。

    一个SQL节点实际上只是一种特殊类型的 API节点,它指定访问NDB集群数据的任何应用程序。API节点的另一个示例是用于还原集群备份ndb_restore实用程序。可以使用NDB API编写这样的应用程序。有关NDB API的基本信息,请参阅NDB API 入门

重要

期望在生产环境中采用三节点设置是不现实的。这样的配置不提供冗余; 受益于NDB集群的高可用性功能,您必须使用多个数据和SQL节点。强烈建议使用多个管理节点。

有关NDB群集中节点,节点组,副本和分区之间关系的简要介绍,请参见 第21.1.2节“NDB群集节点,节点组,副本和分区”

集群配置涉及配置集群中的每个独立节点,并在节点之间建立单独的通信链路。NDB集群目前的设计意图是数据节点在处理器功率,内存空间和带宽方面是同质的。此外,为了提供单点配置,整个群集的所有配置数据都位于一个配置文件中。

管理服务器管理群集配置文件和群集日志。集群中的每个节点都从管理服务器检索配置数据,因此需要一种方法来确定管理服务器驻留的位置。当数据节点中发生感兴趣的事件时,节点将有关这些事件的信息传输到管理服务器,然后管理服务器将信息写入群集日志。

另外,可以有任意数量的集群客户端进程或应用程序。这些包括标准的MySQL客户端, NDB特定的API程序和管理客户端。这些在接下来的几段中描述。

标准的MySQL客户端。  NDB集群可以与以PHP,Perl,C,C ++,Java,Python,Ruby等编写的现有MySQL应用程序一起使用。这些客户端应用程序发送SQL语句并从作为NDB集群SQL节点的MySQL服务器接收响应,这与响应独立MySQL服务器的方式大致相同。

可以修改使用NDB集群作为数据源的MySQL客户端,以利用连接多个MySQL服务器的能力来实现负载平衡和故障转移。例如,使用Connector / J 5.0.6及更高版本的Java客户端可以使用 jdbc:mysql:loadbalance://URL(Connector / J 5.1.7中的改进)来透明地实现负载平衡; 有关将Connector / J与NDB群集一起使用的更多信息,请参阅 将连接器/ J用于NDB群集

NDB客户端程序。  可以编写客户端程序NDBCLUSTER,使用NDB API(一种高级C ++ API)直接从存储引擎访问NDB群集数据,绕过任何可能连接到群集的MySQL服务器此类应用程序对于不需要SQL数据接口的专用目的可能很有用。有关更多信息,请参阅 NDB API

NDB也可以使用NDB Cluster Connector for Java为NDB集群编写特定的Java应用程序NDB集群连接器包括ClusterJ,这是一种高级数据库API,类似于直接连接到Hibernate和JPA等对象关系映射持久性框架NDBCLUSTER,因此不需要访问MySQL服务器。ClusterJPA的 NDB Cluster也提供了支持,一个OpenJPA实现NDB集群,利用ClusterJ和JDBC的优势; 使用ClusterJ(绕过MySQL服务器)执行ID查找和其他快速操作,而使用JDBC可通过MySQL服务器发送可从MySQL查询优化器中受益的更复杂的查询。有关更多信息请参阅 Java和NDB集群,以及 ClusterJ API和数据对象模型

NDB集群还支持使用Node.js在JavaScript中编写的应用程序。MySQL的JavaScript连接器包括用于直接访问NDB存储引擎和MySQL服务器的适配器使用此连接器的应用程序通常是事件驱动的,并使用与ClusterJ所使用的方法类似的领域对象模型。有关更多信息,请参阅适用于JavaScript的MySQL NoSQL连接器

用于NDB群集的Memcache API作为memcached 1.6及更高版本的可加载 ndbmemcache存储引擎实现,可用于提供持久NDB群集数据存储,可使用memcache协议访问。

标准的memcached缓存引擎包含在NDB Cluster 7.5发行版中。每个 memcached服务器都可以直接访问存储在NDB集群中的数据,但也可以在本地缓存数据并提供来自本地缓存的(某些)请求。

有关更多信息,请参阅NDB群集的ndbmemcache-Memcache API

管理客户。  这些客户端连接到管理服务器并提供命令,以便优雅地启动和停止节点,启动和停止消息跟踪(仅限调试版本),显示节点版本和状态,启动和停止备份等等。这种类型的程序的一个示例是NDB集群提供ndb_mgm管理客户端(请参见第21.4.5节“ ndb_mgm - NDB集群管理客户端”)。这些应用程序可以使用MGM API编写 ,它是一种直接与一个或多个NDB集群管理服务器通信的C语言API。有关更多信息,请参阅 MGM API

Oracle还提供MySQL Cluster Manager,它提供高级命令行界面,简化许多复杂的NDB群集管理任务,例如重新启动具有大量节点的NDB群集。MySQL Cluster Manager客户端还支持获取和设置大多数节点配置参数值的命令以及与NDB集群相关的mysqld服务器选项和变量。有关更多信息,请参阅MySQL™Cluster Manager 1.4.4用户手册

事件日志。  NDB群集按类别(启动,关闭,错误,检查点等)记录事件,优先级和严重性。所有可报告事件的完整列表可以在 第21.5.6节“在NDB集群中生成的事件报告”中找到事件日志是这里列出的两种类型:

  • 集群日志:为整个集群记录所有需要报告的事件。

  • 节点日志:还为每个单独的节点保留一个单独的日志。

注意

在正常情况下,仅保留和检查集群日志是必要和充分的。只有为了应用程序开发和调试目的才需要查阅节点日志。

检查点。  一般来说,当数据保存到磁盘时,据说已经达到检查点更具体到NDB群集,检查点是所有提交的事务存储在磁盘上的时间点。关于NDB存储引擎,有两种类型的检查点协同工作,以确保集群数据的一致视图得到维护。这些显示在以下列表中:

  • 本地检查点(LCP):这是特定于单个节点的检查点; 然而,集群中的所有节点或多或少同时发生LCP。LCP通常每几分钟发生一次; 精确的时间间隔会有所不同,并且取决于节点存储的数据量,群集活动的级别以及其他因素。

    在NDB 7.6.4之前,LCP将所有节点的数据保存到磁盘。NDB 7.6.4引入了对部分LCP的支持,可以在某些条件下显着提高性能。章节21.1.4.2,“什么是新的在NDB簇7.6”,以获取更多的信息,以及所述的描述 EnablePartialLcpRecoveryWork 其使得部分的LCP和控制存储的他们所使用的量的配置参数。

  • 全局检查点(GCP):当所有节点的事务同步并且重做日志刷新到磁盘时,GCP每隔几秒发生一次。

有关由本地检查点和全局检查点创建的文件和目录的详细信息,请参阅 NDB群集数据节点文件系统目录文件

21.1.2 NDB群集节点,节点组,副本和分区

本节讨论NDB Cluster为存储划分和复制数据的方式。

在接下来的几段中讨论了理解这个主题的许多概念。

数据节点。  一个ndbdndbmtd进程,它存储一个或多个 副本 - 即 分配给节点所属节点组分区副本(本节后面讨论)。

每个数据节点应位于一台单独的计算机上。虽然也可以在一台计算机上托管多个数据节点进程,但通常不推荐这种配置。

术语节点数据节点在引用ndbdndbmtd过程时可互换使用 ; 如上所述,管理节点(ndb_mgmd 进程)和SQL节点(mysqld进程)在本讨论中被指定。

节点组。  节点组由一个或多个节点组成,并存储分区或副本(请参阅下一项)。

NDB群集中的节点组数量不能直接配置; 它是数据节点数量和副本数量(NoOfReplicas 配置参数)的函数,如下所示:

[节点组数量] = [数据节点数量] / NoOfReplicas

因此,如果文件中NoOfReplicas设置为1,则具有4个数据节点的NDB群集具有4个节点组,如果 设置为2,则config.ini2个节点组,如果 NoOfReplicas设置为4,则1个节点组。如果NoOfReplicas设置为4,则将 在本节后面讨论副本。有关更多信息NoOfReplicas,请参见 第21.3.3.6节“定义NDB群集数据节点”

注意

NDB群集中的所有节点组必须具有相同数量的数据节点。

您可以在线添加新的节点组(以及新的数据节点)到正在运行的NDB群集; 有关更多信息请参见 第21.5.14节“在线添加NDB群集数据节点”

划分。  这是集群存储的数据的一部分。每个节点负责保留分配给它的任何分区(即至少一个副本)的至少一个副本可用于群集。

NDB集群默认使用的分区数量取决于数据节点的数量和数据节点正在使用的LDM线程的数量,如下所示:

[分区数量] = [数据节点数量] * [LDM线程数量]

当使用运行ndbmtd的数据节点时,LDM线程的数量由设置来控制 MaxNoOfExecutionThreads使用ndbd时,会有一个LDM线程,这意味着有多少个群集分区与参与群集的节点数量相同。这也是使用时的情况下 ndbmtdMaxNoOfExecutionThreads设置为3或更小。(您应该意识到,LDM线程的数量随着此参数值的增加而增加,但不是以严格的线性方式增加,并且设置时还有其他限制;请参阅说明以 MaxNoOfExecutionThreads 获取更多信息。)

NDB和用户定义的分区。  NDB集群通常会NDBCLUSTER自动分区 表。但是,也可以使用用户定义的NDBCLUSTER表格分区这受以下限制:

  1. 只有KEYLINEAR KEY分区方案在生产与支持NDB表。

  2. 可以为任何NDB显式定义的分区的最大数量,NDB集群中节点组的数量按照本节前面讨论的方法确定。当使用ndbd 进行数据节点处理时,设置 无效; 在这种情况下,为了执行该计算,可以将其视为等于1。 8 * MaxNoOfExecutionThreads * [number of node groups]MaxNoOfExecutionThreads

    有关更多信息,请参见第21.4.3节“ ndbmtd - NDB群集数据节点守护进程(多线程)”

有关NDB集群和用户定义分区的更多信息,请参见第21.1.6节“NDB集群的已知限制”第22.6.2节“与存储引擎相关的分区限制”

复制品。  这是一个集群分区的副本。节点组中的每个节点都存储一个副本。有时也被称为 分区副本副本的数量等于每个节点组的节点数量。

副本完全属于单个节点; 一个节点可以(并且通常)存储多个副本。

下图说明了一个NDB集群,其中有四个数据节点运行ndbd,并排列在两个节点组中,每个节点组中有两个节点; 节点1和2属于节点组0,节点3和4属于节点组1。

注意

这里只显示数据节点; 尽管工作NDB群集需要使用ndb_mgmd进程进行群集管理,并且至少有一个SQL节点需要访问群集存储的数据,但为清楚起见,这些内容在图中被省略。

图21.2具有两个节点组的NDB群集

Content is described in the surrounding text.

集群存储的数据分为四个分区,分别编号为0,1,2和3.每个分区都存储在多个副本中,位于同一个节点组上。分区存储在备用节点组中,如下所示:

  • 分区0存储在节点组0上; 一个 主副本(主副本)被存储在节点1和一个 备份副本(分区的备份副本)被存储在节点2上。

  • 分区1存储在另一个节点组(节点组1)上; 此分区的主副本位于节点3上,其备份副本位于节点4上。

  • 分区2存储在节点组0上。但是,其两个副本的放置与分区0相反; 对于分区2,主副本存储在节点2上,而备份存储在节点1上。

  • 分区3存储在节点组1上,其两个副本的位置与分区1的位置相反。也就是说,其主副本位于节点4上,节点3上具有备份。

这对于NDB集群的持续运行意味着什么:只要参与集群的每个节点组至少有一个节点在运行,集群就拥有所有数据的完整副本并保持可行性。下图说明了这一点。

图21.3 2x2 NDB群集所需的节点

Content is described in the surrounding text.

在此示例中,群集由两个节点组组成,每个节点组由两个数据节点组成。每个数据节点都运行ndbd的一个实例来自节点组0的至少一个节点和来自节点组1的至少一个节点的任何组合足以保持该集群活着但是,如果来自单个节点组的两个节点发生故障,则由另一个节点组中剩余的两个节点组成的组合不足。在这种情况下,集群失去了整个分区,因此不能再访问所有NDB集群数据。

在NDB 7.5.4和更高版本中,单个NDB群集实例支持的最大节点组数量为48(错误#80845,错误#22996305)。

21.1.3 NDB集群硬件,软件和组网要求

NDB Cluster的优势之一是它可以在商品硬件上运行,并且在这方面没有特别的要求,除了大量的RAM之外,由于所有实时数据存储均在内存中完成。(可以使用磁盘数据表减少这种需求 - 关于这些的更多信息,请参见 第21.5.13节“NDB集群磁盘数据表”)。自然,多个更快的CPU可以提高性能。其他NDB群集进程的内存要求相对较小。

NDB集群的软件要求也不高。主机操作系统不需要任何不寻常的模块,服务,应用程序或配置来支持NDB群集。对于支持的操作系统,标准安装应该足够了。MySQL软件的要求很简单:所需要的只是NDB集群的生产版本。仅仅为了能够使用NDB集群,编译MySQL本身并不是绝对必要的。我们假设您正在使用适用于您的平台的二进制文件,可从http://dev.mysql.com/downloads/cluster/的NDB Cluster软件下载页面 获得

对于节点之间的通信,NDB群集支持任何标准拓扑中的TCP / IP网络,每个主机的最低预期值为标准的100 Mbps以太网卡,以及交换机,集线器或路由器,为整个群集提供网络连接。我们强烈建议将NDB群集运行在其自己的子网上,由于以下原因,该群集不与未构成群集一部分的机器共享:

  • 安全。  NDB群集节点之间的通信不以任何方式进行加密或屏蔽。保护NDB群集内传输的唯一方法是在受保护的网络上运行NDB群集。如果您打算将NDB群集用于Web应用程序,则群集应该位于防火墙之后,而不是位于您的网络的非军事区(DMZ)或其他地方。

    有关更多信息请参见 第21.5.12.1节“NDB集群安全和联网问题”

  • 效率。  在专用或受保护的网络上设置NDB群集可使群集独占使用群集主机之间的带宽。为NDB群集使用单独的交换机不仅有助于防止未经授权访问NDB群集数据,还可确保NDB群集节点不受网络上其他计算机之间传输造成的干扰的影响。为了增强可靠性,您可以使用双交换机和双卡作为单点故障来移除网络; 许多设备驱动程序都支持此类通信链接的故障转移

网络通信和延迟。  NDB集群需要数据节点和API节点(包括SQL节点)之间以及数据节点和其他数据节点之间的通信,以执行查询和更新。这些进程之间的通信延迟可能直接影响观察到的用户查询的性能和延迟。另外,为了在节点无故障的情况下保持一致性和服务,NDB集群使用心跳和超时机制,将节点通信的扩展丢失视为节点故障。这可能会导致冗余度降低。回想一下,为了保持数据的一致性,NDB群集在节点组中的最后一个节点失败时关闭。因此,为了避免增加强制关机的风险,

数据或API节点的失败会导致涉及失败节点的所有未提交事务中止。数据节点恢复需要在存活数据节点上同步故障节点的数据,并在数据节点恢复服务之前重新建立基于磁盘的重做和检查点日志。此恢复可能需要一段时间,在此期间,群集的运行减少了冗余。

心跳依赖于所有节点及时生成心跳信号。如果节点过载,由于与其他程序共享而导致机器CPU不足,或者由于交换而导致延迟,这可能无法实现。如果心跳产生被充分延迟,其他节点将对缓慢响应的节点视为失败。

将缓慢节点视为失败节点的处理在某些情况下可能需要或可能不需要,具体取决于节点对群集其余部分的缓慢操作的影响。当设置超时值等 HeartbeatIntervalDbDbHeartbeatIntervalDbApi对NDB集群,必须小心照顾,以实现快速检测,故障转移和恢复工作,同时避免潜在的昂贵误报。

如果数据节点之间的通信延迟预期高于LAN环境中预期的通信延迟(大约为100μs),则必须增加超时参数以确保任何允许的延迟周期均在配置的超时范围内。以这种方式增加超时对检测故障的最坏情况时间以及因此恢复服务的时间具有相应的影响。

LAN环境通常可以配置为具有稳定的低延迟,并且可以通过快速故障转移提供冗余。单个链路故障可以通过在TCP级别(NDB集群正常运行时)可见的最小和受控延迟恢复。WAN环境可能会提供一定范围的延迟,以及冗余和较慢的故障转移时间。在恢复端到端连接之前,单个链路故障可能需要传播路由更改。在TCP级别,这可能会在单个通道上出现较大的延迟。在这些情况下观察到的最差情况下的TCP延迟与IP层重新路由故障的最差情况时间有关。

SCI支持。  NDB集群也可以使用高速可伸缩一致接口(SCI),但这不是必需条件。有关此协议及其与NDB群集一起使用的更多信息请参见第21.3.4节“使用与NDB群集的高速互连”

21.1.4 NDB集群中的新功能

以下各节介绍了与早期版本系列相比,在NDB Cluster 7.5和NDB Cluster 7.6中实施NDB Cluster的更改。NDB Cluster 7.5可作为NDB 7.5.4开始的通用版本发布,建议用于新部署。NDB Cluster 7.6可作为开发人员里程碑版本。有关NDB Cluster 7.5中的添加和其他更改的信息,请参见 第21.1.4.1节“NDB Cluster 7.5中的新增功能”有关NDB Cluster 7.6中的新功能和其他更改的信息,请参见第21.1.4.2节“ NDB Cluster 7.6中的新增功能

NDB集群7.4是新部署仍支持的最新通用版本发行版。NDB Cluster 7.3是以前的GA版本,仍然支持现有部署的生产。NDB Cluster 7.2也是以前的GA版本系列,仍然在生产中支持。生产中不再维护或支持NDB 7.1和更早版本系列。我们建议新部署使用NDB Cluster 7.4或最新的GA版本NDB Cluster 7.5。有关NDB 7.4中添加的功能的信息,请参阅 NDB Cluster 7.4中的新功能 ; NDB Cluster 7.3中的新增功能 包含有关NDB 7.3中添加的功能的信息。有关NDB集群7.2和以前的NDB集群版本的信息,请参阅 MySQL NDB集群7.2中的新增功能

21.1.4.1 NDB Cluster 7.5中的新增功能

下面列出了NDB Cluster 7.5中可能感兴趣的主要变化和新功能:

  • ndbinfo增强功能。 ndbinfo数据库 中进行了许多更改 ,其中主要是它现在提供有关NDB群集节点配置参数的详细信息。

    config_params表已被设置为只读,并且增加了额外的列,提供了有关每个配置参数的信息,包括参数的类型,默认值,最大值和最小值(如果适用),参数的简要说明以及参数是必需的。该表还为每个参数提供了唯一的参数 param_number

    config_values 表中的 一行显示具有指定ID的节点上给定参数的当前值。该参数由config_param映射到config_params 表的的值标识param_number

    使用这种关系,您可以在这两个表上编写联接,以按名称获取一个或多个NDB群集配置参数的缺省值,最大值,最小值和当前值。这里显示了一个使用这种连接的示例SQL语句:

    SELECT p.param_name AS Name,
            v.node_id AS节点,
            p.param_type AS类型,
            p.param_default AS'默认',
            p.param_min AS最小值,
            p.param_max AS最大值,
            CASE p.param_mandatory WHEN 1 THEN'Y'ELSE'N'END AS'Required',
            v.config_value AS当前
    FROM config_params p
    加入config_values v
    ON p.param_number = v.config_param
    在哪里。param_name IN('NodeId','HostName','DataMemory','IndexMemory');
    

    有关这些更改的更多信息,请参见 第21.5.10.8节“ndbinfo config_params表”有关更多信息和示例,请参见 第21.5.10.9节“ndbinfo config_values表”

    另外,ndbinfo数据库不再依赖于MyISAM存储引擎。所有ndbinfo表格和视图现在都使用NDB(如图所示 NDBINFO)。

    ndbinfo在NDB 7.5.4中引入了 几个新表格。这里列出了这些表格,并附有简要说明:

    有关更多信息,请参阅各个表的说明。

  • 默认的行和列格式更改。  从NDB 7.5.1开始,ROW_FORMAT选项和 COLUMN_FORMAT选项 的默认值 CREATE TABLE可以设置为, DYNAMIC而不是 FIXED使用新的MySQL服务器变量 ndb_default_column_format 作为此更改的一部分添加; 将其设置为 FIXEDDYNAMIC(或使用等效选项 启动mysqld--ndb-default-column-format=FIXED)来强制将该值用于 COLUMN_FORMATROW_FORMAT在NDB 7.5.4之前,这个变量的默认值是DYNAMIC; 在此版本和更高版本中,缺省值是 FIXED,它提供了对先前版本的向后兼容性(错误#24487363)。

    现有表格列使用的行格式和列格式不受此更改的影响。添加到这些表中的新列使用这些新的默认值(可能会被重写ndb_default_column_format),并且现有列也会更改为使用这些列,前提是ALTER TABLE 执行此操作语句指定 ALGORITHM=COPY

    注意

    ALTER TABLE如果运行mysqld,不能隐式执行 复制--ndb-allow-copying-alter-table=FALSE

  • ndb_binlog_index不再依赖于MyISAM。  从NDB 7.5.2开始,ndb_binlog_index NDB Cluster Replication中采用的表现在使用 InnoDB存储引擎而不是MyISAM升级时,您可以运行 mysql_upgrade 以使其执行 在此表上。使用 此表仍然支持向后兼容。 --force --upgrade-system-tablesALTER TABLE ... ENGINE=INNODBMyISAM

    此更改的好处是,它可以依赖此表的事务行为和无锁读取,这有助于缓解清除操作和日志循环期间的并发问题,并提高此表的可用性。

  • ALTER TABLE更改。  NDB集群以前支持联机的备选语法ALTER TABLE在NDB Cluster 7.5中不再支持这一功能,NDB Cluster 7.5专门ALGORITHM = DEFAULT|COPY|INPLACE用于表DDL,就像标准的MySQL服务器一样。

    影响此语句使用的另一个变化是, ALTER TABLE ... ALGORITHM=INPLACE RENAME 除重命名外,现在可能还包含DDL操作。

  • 不建议使用ExecuteOnComputer参数。 管理节点数据节点API节点ExecuteOnComputer配置参数 已被弃用,现在可在未来版本的NDB群集中删除。您应该为所有三种类型的节点使用等效参数。 HostName

  • 记录每键优化。  NDB处理程序现在使用每个关键字的记录接口来为MySQL 5.7.5中的优化器实现的索引统计信息。这种变化带来的一些好处包括:

    • 在许多情况下,优化器现在选择更好的执行计划,其中先前已选择不太理想的连接索引或表连接顺序

    • 显示的行估计 EXPLAIN更准确

    • 显示的基数估计SHOW INDEX得到改进

  • 连接池节点ID。  NDB 7.5.0添加了mysqld --ndb-cluster-connection-pool-nodeids 选项,该选项允许为连接池设置一组节点ID。此设置将覆盖 --ndb-nodeid,这意味着它也会覆盖 --ndb-connectstring选项和NDB_CONNECTSTRING环境变量。

    注意

    您可以使用mysqld--ndb-cluster-connection-pool 选项设置连接池的大小

  • 删除了create_old_temporals。 create_old_temporals系统变量被弃用NDB簇7.4,现在已经被删除。

  • ndb_mgm客户端PROMPT命令。  NDB Cluster 7.5添加了用于设置客户端命令行提示符的新命令。以下示例说明了该PROMPT命令的用法

    ndb_mgm> PROMPT mgm#1:
    mgm#1:SHOW
    群集配置
    ---------------------
    [ndbd(NDB)] 4节点(s)
    id = 5 @ 10.100.1.1(mysql-5.7.22-ndb-7.5.11,Nodegroup:0,*)
    id = 6 @ 10.100.1.3(mysql-5.7.22-ndb-7.5.11,Nodegroup:0)
    id = 7 @ 10.100.1.9(mysql-5.7.22-ndb-7.5.11,Nodegroup:1)
    id = 8 @ 10.100.1.11(mysql-5.7.22-ndb-7.5.11,Nodegroup:1)
    
    [ndb_mgmd(MGM)] 1个节点
    id = 50 @ 10.100.1.8(mysql-5.7.22-ndb-7.5.11)
    
    [mysqld(API)] 2节点(s)
    id = 100 @ 10.100.1.8(5.7.22-ndb-7.5.11)
    id = 101 @ 10.100.1.10(5.7.22-ndb-7.5.11)
    
    mgm#1:PROMPT
    ndb_mgm>EXIT
    乔恩@ valhaj:在/ usr /本地/ MySQL的/ bin中>
    

    有关更多信息和示例,请参见 第21.5.2节“NDB集群管理客户端中的命令”

  • 增加每个片段的FIXED列存储。  NDB Cluster 7.5和更高版本支持FIXED列中每个数据段最多128 TB 在NDB集群7.4及更早版本中,每个碎片为16 GB。

  • 已弃用的参数已删除。  以前的NDB群集数据节点配置参数在以前的NDB群集版本中已被弃用,并在NDB 7.5.0中被删除:

    • Id:在NDB 7.1.9中已弃用; 由...取代NodeId

    • NoOfDiskPagesToDiskDuringRestartTUPNoOfDiskPagesToDiskDuringRestartACC:既弃用,也无效; 在MySQL 5.1.6中被替换DiskCheckpointSpeedInRestart,后者本身后来被弃用(在NDB 7.4.1中),现在也被删除。

    • NoOfDiskPagesToDiskAfterRestartACCNoOfDiskPagesToDiskAfterRestartTUP:既弃用又无效; 在MySQL 5.1.6中被替换DiskCheckpointSpeed,后者本身后来被弃用(在NDB 7.4.1中),现在也被删除。

    • ReservedSendBufferMemory:在NDB 7.2.5中已弃用; 不再有任何效果。

    • MaxNoOfIndexes:陈旧(pre-MySQL 4.1),没有效果; 早已由MaxNoOfOrderedIndexes取代 MaxNoOfUniqueHashIndexes

    • Discless:古老的(pre-MySQL 4.1)同义词并且很久以后被替换为 Diskless

    ByteOrder在NDB 7.5.0中也删除了 过时的和未使用的(因此也是以前未记录的)计算机配置参数。

    刚刚描述的参数在NDB 7.5中不受支持。试图在NDB群集配置文件中使用任何这些参数现在会导致错误。

  • DBTC扫描增强功能。  通过减少用于内核DBTCDBDIH内核块 之间通信的信号数量,扫描得到了改进,通过减少NDB用于扫描操作的CPU资源的使用,在用于扫描操作时可以实现更高的数据节点可伸缩性,在某些情况下,估计有5% 。

    同样由于这些更改,响应时间应该大大提高,这可以帮助防止主线程超载的问题。另外,在BACKUP内核块中进行的扫描 也得到了改进,并且比以前的版本更高效。

  • JSON列支持。  NDB 7.5.2及更高版本支持表格JSON列类型 NDB和MySQL服务器中的JSON函数,但受限于 NDB表格最多可包含3 JSON列。

  • 从任何副本读取; 指定hashmap分区片段的数量。  以前,除简单读取之外,所有读取均针对主副本。(简单读取是读取时锁定行的读取。)从NDB 7.5.2开始,可以从任何副本启用读取。这是默认禁用的,但可以使用ndb_read_backup此版本中添加系统变量为给定的SQL节点启用

    以前,可以仅使用一种类型的分区映射定义表,每个节点中每个LDM上有一个主分区,但在NDB 7.5.2中,通过设置分区平衡可以更灵活地分配分区(片段计数类型)。可能的平衡方案是每个节点一个,每个节点组一个,每个节点每个LDM一个,每个节点组每个LDM一个。

    该设置可以通过嵌入注释 语句中的PARTITION_BALANCE选项(FRAGMENT_COUNT_TYPE在NDB 7.5.4中重命名控制各个表使用此语法也支持表级的设置有关更多信息和示例,请参见 第13.1.18.10节“设置NDB_TABLE选项”NDB_TABLECREATE TABLEALTER TABLEREAD_BACKUP

    在NDB API应用程序中,也可以使用为此提供的方法来获取和设置表格的分区平衡; 有关这些的更多信息,请参阅 Table :: getPartitionBalance()Table :: setPartitionBalance()以及 Object :: PartitionBalance

    作为这项工作的一部分,NDB 7.5.2也引入了 ndb_data_node_neighbour 系统变量。这旨在用于事务提示,为此SQL节点提供附近数据节点。

    另外,恢复表模式时, ndb_restore --restore_meta现在使用目标群集的默认分区,而不是使用与从中进行备份的原始群集相同数量的分区。有关更多信息和示例请参见 第21.4.24.1.2节“恢复到比原始更多的节点”

    NDB 7.5.3增加了进一步的增强功能 READ_BACKUP:在此版本和更高版本中,可以为READ_BACKUP在线的给定表格设置一部分 ALTER TABLE ... ALGORITHM=INPLACE ...

  • ThreadConfig改进。  NDB 7.5.2针对ThreadConfig多线程数据节点(ndbmtd)配置参数实现了许多增强功能和功能添加 ,其中包括对更多平台的支持。接下来的几段将介绍这些变化。

    非独占CPU锁定现在支持FreeBSD和Windows,使用cpubindcpuset独家CPU锁定现在支持在Solaris(只)使用 cpubind_exclusivecpuset_exclusive它们在此版本中引入的参数。

    线程优化现在可用,由新thread_prio参数控制 thread_prio在Linux,FreeBSD,Windows和Solaris上受支持,并且在平台上有所不同。有关更多信息,请参阅说明 ThreadConfig

    realtime参数现在在Windows平台上受支持。

  • 分区大于16 GB。  由于NDB集群数据节点使用的哈希索引实现的改进,NDB现在表的分区 可能包含固定列的16 GB以上的数据,而固定列的最大分区大小现在可提高到128 TB。之前的限制是由于内核中的 DBACCNDB仅使用了对DBTUP中行固定大小部分的32位引用 ,尽管对该数据的45位引用DBTUP本身以及内核中的其他位置外 DBACC; 所有这些对DBACC块中处理的数据的引用现在都使用45位来代替。

  • 从ndb_restore打印SQL语句。  NDB 7.5.4添加了 随NDB集群分布提供--print-sql-logndb_restore实用程序选项该选项启用SQL日志记录stdout重要提示:使用此选项恢复的每个表必须具有明确定义的主键。

    有关更多信息请参见第21.4.24节“ ndb_restore - 恢复NDB群集备份”

  • 组织RPM软件包。  从NDB 7.5.4开始,为NDB集群提供的RPM软件包的命名和组织与更紧密地与为MySQL服务器发布的软件包保持一致。所有NDB Cluster RPM的名称现在都以前缀为前缀 mysql-cluster数据节点现在使用该data-node安装; 管理节点现在从management-server包中安装 ; 并且SQL节点需要servercommon包。MySQL和 NDB客户端程序,包括 mysql客户端和 ndb_mgm管理客户端,现在都包含在了client RPM。

    有关NDB Cluster RPM和其他信息的详细列表,请参见 第21.2.2.2节“从RPM安装NDB Cluster”

  • ndbinfo进程和config_nodes表。  NDB 7.5.7将两个表添加到 ndbinfo信息数据库中,以提供有关群集节点的信息; 这些表格在这里列出:

    • config_nodes:该表为NDB集群的配置文件中列出的每个节点提供节点ID,进程类型和主机名。

    • 所述processes关于当前连接到群集节点节目信息; 这些信息包括进程名称和系统进程ID; 对于每个数据节点和SQL节点,它还显示节点的天使进程的进程ID。此外,该表显示每个连接节点的服务地址; 这个地址可以在NDB API应用程序中使用该Ndb_cluster_connection::set_service_uri() 方法设置,该 方法也添加到NDB 7.5.7中。

  • 系统名称。  NDB群集的系统名称可用于标识特定的群集。从NDB 7.5.7开始,MySQL服务器将此名称显示为Ndb_system_name状态变量的值 ; NDB API应用程序可以使用Ndb_cluster_connection::get_system_name() 在同一版本中添加方法。

    基于管理服务器启动时间的系统名称会自动生成; 您可以在启动管理服务器之前,通过[system]在群集的配置文件中添加一节并Name在此部分中将参数设置 为您选择的值来覆盖此值

MySQL集群管理器还支持NDB Cluster 7.5,它提供了一个高级命令行界面,可以简化许多复杂的NDB集群管理任务。有关更多信息,请参阅MySQL™Cluster Manager 1.4.4用户手册

21.1.4.2 NDB簇7.6的新增功能

NDB Cluster 7.6中的新功能和其他重要更改可能会引起您的兴趣,请参阅以下列表:

  • 新的磁盘数据表格文件格式。  在NDB 7.6.2中为NDB磁盘数据表引入了一种新的文件格式,这使得每个磁盘数据表可以唯一标识而不用重新使用任何表ID。NDB 7.6.4进一步改进了格式。这应该有助于解决用户可见的页面和扩展区处理问题,因为磁盘数据表的快速创建和删除问题以及旧格式无法提供现成解决方法的问题。

    现在每当创建新的撤消日志文件组和表空间数据文件时都会使用新格式。与现有磁盘数据表相关的文件将继续使用旧格式,直到重新创建其表空间和撤消日志文件组。

    重要

    旧格式和新格式不兼容; 不同的数据文件或由相同的磁盘数据表或表空间使用的撤销日志文件不能使用混合格式。

    为避免与格式更改有关的问题,升级到NDB 7.6.2或NDB 7.6.4时,应该重新创建任何现有的表空间和撤消日志文件组。您可以通过执行每个数据节点的初始重新启动(即使用该--initial 选项)作为升级过程的一部分来执行此操作。作为从NDB 7.5或更早版本系列升级到NDB 7.6或更高版本的一部分,您可以预期这一步骤是强制性的。

    如果您使用的是磁盘数据表,那么从任何 NDB 7.6版本降级 (无需考虑版本状态)至任何NDB 7.5或更早发行版本,都需要您重新启动所有数据节点, --initial作为降级过程的一部分。这是因为NDB 7.5和更早版本系列无法读取新的磁盘数据文件格式。

    有关更多信息,请参见 第21.2.8节“升级和降级NDB集群”

  • 数据存储池和动态索引内存。 NDB 表列中 索引所需的内存现在是从分配的内容中动态分配的 DataMemory出于这个原因, IndexMemory 配置参数现在已被弃用,并且可能会在未来的发行版系列中删除。

    重要

    从NDB 7.6.2开始,如果IndexMemoryconfig.ini文件中设置,管理服务器将发出警告 IndexMemory已弃用,请在分配的每个ndbd(DB)节点上使用Number字节代替启动时存储索引,并且分配给此参数的任何内存为自动添加到 DataMemory

    另外,默认值 DataMemory已增至98M; 默认值IndexMemory已降为0。

    将索引存储器与数据存储器组合在一起简化了NDB; 这些更改的另一个好处是,通过增加LDM线程的数量来扩展不再受限于为其设置不够大的值。 IndexMemory这是因为索引内存不再是仅分配一次的静态数量(当集群开始),但现在可以根据需要进行分配和释放。以前,有时候增加LDM线程的数量可能会导致索引内存耗尽,同时大量的数据 DataMemory仍然可用。

    作为这项工作的一部分,许多DataMemory与表数据存储没有直接关系使用实例 现在使用事务内存来代替。

    出于这个原因,在某些系统上可能需要增加 SharedGlobalMemory 以允许在需要时增加事务内存,例如当使用NDB群集复制时,这需要数据节点上的大量缓冲。在执行初始批量加载数据的系统上,可能需要将非常大的事务分解为更小的部分。

    此外,数据节点现在生成 MemoryUsage事件(请参见 第21.5.6.2节“NDB群集日志事件”),并在资源使用率达到99%以及达到80%,90%或90%时在群集日志中编写适当的消息。 100%,如前所述。

    其他相关更改在此处列出:

    • IndexMemory不再是ndbinfo.memoryusage 表格memory_type列中显示的值之一 ; 也不再显示在ndb_config的输出中

    • REPORT MEMORYUSAGE 和其他暴露内存消耗的命令现在使用32K页面显示索引内存消耗(以前这些是8K页面)。

    • ndbinfo.resources 表现在将DISK_OPERATIONS 资源显示TRANSACTION_MEMORY,并且RESERVED资源已被删除。

  • ndbinfo进程和config_nodes表。  NDB 7.6.2向ndbinfo信息数据库添加了两个表格, 以提供有关集群节点的信息; 这些表格在这里列出:

    • config_nodes:此表为NDB群集配置文件中列出的每个节点的节点ID,进程类型和主机名。

    • 所述processes关于当前连接到群集节点节目信息; 这些信息包括进程名称和系统进程ID; 对于每个数据节点和SQL节点,它还显示节点的天使进程的进程ID。此外,该表显示每个连接节点的服务地址; 这个地址可以在NDB API应用程序中使用该Ndb_cluster_connection::set_service_uri() 方法设置,该 方法也添加到NDB 7.6.2中。

  • 系统名称。  NDB群集的系统名称可用于标识特定的群集。从NDB 7.6.2开始,MySQL服务器将此名称显示为Ndb_system_name状态变量的值 ; NDB API应用程序可以使用Ndb_cluster_connection::get_system_name() 在同一版本中添加方法。

    基于管理服务器启动时间的系统名称自动生成>;; 您可以在启动管理服务器之前,通过[system]在群集的配置文件中添加一节并Name在此部分中将参数设置 为您选择的值来覆盖此值

  • ndb_import CSV导入工具。  ndb_import被添加到NDB Cluster 7.6.2中,它NDB使用NDB API 直接将CSV格式的数据加载到 表中(只需创建它所在的表和数据库就可以使用MySQL服务器)。 ndb_import可以被看作mysqlimportLOAD DATA INFILESQL语句的模拟,并且支持许多用于格式化数据的相同或相似的选项。

    假设数据库和目标NDB 表存在,ndb_import只需要连接到集群的管理服务器(ndb_mgmd)来执行输入; 因此,[api] 群集的config.ini文件目的中必须有一个可用于该工具插槽

    有关更多信息请参见第21.4.14节“ ndb_import - 将CSV数据导入NDB”

  • ndb_top监控工具。  添加了ndb_top实用程序,该实用程序可NDB实时显示数据节点的CPU负载和使用情况信息 这些信息可以以文本格式显示,或以ASCII图形显示,也可以同时显示。该图可以用颜色或灰度显示。

    ndb_top连接到NDB群集SQL节点(即MySQL服务器)。出于这个原因,程序必须能够以具有数据库SELECT中表权限的MySQL用户身份进行连接 ndbinfo

    ndb_top适用于从NDB 7.6.3开始的Linux,Solaris和Mac OS X平台。它目前不适用于Windows平台。

    有关更多信息,请参见 第21.4.30节“ ndb_top - 查看NDB线程的CPU使用情况信息”

  • 代码清理。  大量的正常操作不需要的调试语句和打印输出已被转移到仅用于测试或调试NDB或完全免除的代码中 在许多情况下,这种开销的消除应该导致LDM和TC线程性能的显着改善,大约为10%。

  • LDM线程和LCP改进。  以前,当本地数据管理线程遇到I / O滞后时,它会更慢地写入本地检查点。例如,这可能发生在磁盘过载情况下。可能会出现问题,因为其他LDM线程并不总是遵守这个状态,或者也是如此。 NDB现在全局跟踪I / O滞后模式,以便至少一个线程在I / O滞后模式下写入时报告此状态; 然后确保在减速条件期间针对该LCP的所有LDM线程的写入速度降低。由于其他LDM实例现在可以观察到写入速度下降,因此整体容量会有所增加; 这使得磁盘过载(或其他导致I / O滞后的情况)在这种情况下比以前更快被克服。

  • NDB错误识别。  错误消息和信息可以使用NDB 7.6.4及更高版本中mysql客户端从信息数据库中的新 error_messages表中ndbinfo获取。另外,7.6.4版本引入了一个命令行客户机ndb_perror,用于从NDB错误代码获取信息; 这种替换使用PERROR--ndb,这是现在已经过时,并受到在未来版本中去除。

    有关更多信息,请参见 第21.5.10.21节“ndbinfo error_messages表”第21.4.17节“ ndb_perror - 获取NDB错误消息信息”

  • SPJ改进。  将扫描作为推送连接执行时(即查询的根是扫描)时,DBTC块将SPJ请求发送到DBSPJ 与要扫描的片段相同的节点上的实例。以前,为每个节点的碎片发送了一个这样的请求。由于数量 DBTCDBSPJ 实例通常设置为少于LDM实例的数量,这意味着所有SPJ实例都参与单个查询的执行,事实上,一些SPJ实例可能(并确实)从同一个查询接收多个请求。在NDB 7.6.4中,单个SPJ请求可能会处理一组要扫描的根片段,因此只需将单个SPJ请求(SCAN_FRAGREQ)发送到DBSPJ每个节点上的任何给定SPJ实例(块)。

    由于DBSPJ在评估推送连接时使用的总CPU数量相对较小,与LDM模块(负责大部分CPU使用率)不同,引入多个SPJ模块会增加一些并行性,但额外的开销也会增加。通过启用单个SPJ请求来处理一组要扫描的根片段,以便仅向每个SPJ请求发送一个SPJ请求DBSPJ 每个节点上的实例和批次大小是按照片段分配的,多片段扫描可以获得更大的总批量大小,从而允许在SPJ块内完成一些调度优化,SPJ块可以一次扫描一个片段(给定它是批次总量分配),使用较小的子批次或两者的某种组合并行地扫描所有片段。

    由于以下原因,预计这项工作可以提高推下式连接的性能:

    • 由于可以为每个SPJ请求扫描多个根段,因此执行推送加入时需要请求较少的SPJ实例

    • 增加可用的批量大小分配以及对于每个片段,在大多数情况下也应该导致完成联接所需的更少的请求

  • 改进了重做日志的O_DIRECT处理。  NDB 7.6.4实现了一个新的数据节点配置参数ODirectSyncFlag ,该参数 导致完成的重做日志写入使用 O_DIRECT作为fsync调用进行处理 ODirectSyncFlag默认是禁用的; 启用它,将其设置为true

    您应该记住,当满足以下至少一个条件时,该参数的设置将被忽略:

    • ODirect 未启用。

    • InitFragmentLogFiles 设置为SPARSE

  • 锁定CPU到脱机索引构建线程。  在NDB 7.6.4和更高版本中,脱机索引默认使用所有可用于ndbmtd的内核,而不仅限于为I / O线程保留的单核。还有可能指定一组所需的核心,用于I / O线程执行有序索引的脱机多线程构建。这可以改善重新启动和恢复时间和性能以及可用性。

    注意

    这里使用的离线是指在给定表格未被写入时发生的有序索引构建。这样的索引构建在节点或系统重新启动期间发生,或者在使用ndb_restore 从备份恢复集群时发生--rebuild-indexes

    这种改进涉及几个相关的变化。其中第一项是更改BuildIndexThreads 配置参数的默认值 (从0到128),表示离线排序的索引构建现在默认为多线程。该缺省值 TwoPassInitialNodeRestartCopy 也被更改(从)falsetrue,以便初始节点重新启动首先复制所有数据,而不创建任何索引从 实时节点复制到正在启动的节点,在复制数据后离线建立有序索引,然后再与活动节点同步; 这可以显着减少构建索引所需的时间。此外,为了便于将脱机索引构建线程显式锁定到特定的CPU,idxbld为该ThreadConfig 配置参数定义了一个新的线程类型(

    作为这项工作的一部分,NDB现在可以区分执行线程类型和其他类型的线程,以及永久分配给特定任务的线程类型和分配仅仅是临时的线程类型。

    NDB 7.6.4也引入了nosend 参数 ThreadCOnfig通过将其设置为1,你可以保持mainldmrep,或 tc从帮助发送线程的线程。该参数默认为0,不能与I / O线程,发送线程,索引构建线程或看门狗线程一起使用。

    有关更多信息,请参阅参数的说明。

  • 用于DDL批量数据操作的可变批量大小。  作为通过ndbmtd优化批量DDL性能的工作的一部分,现在可以通过增加使用扫描处理数据的DDL操作的批量数据部分的批量大小来获得性能改进。通过设置下面列出的各个数据节点配置参数,现在可以对批量大小进行配置,以实现独特的索引构建,外键构建和在线重组:

    对于刚刚列出的每个参数,默认值是64,最小值是16,最大值是512。

    增加适当的批量大小或大小可以帮助缓解线程间和节点间延迟,并利用更多并行资源(本地和远程)来帮助扩展DDL性能。在每种情况下,都可以与正在进行的流量进行权衡。

  • 部分LCP。  NDB 7.6.4实现了局部局部检查点。以前,LCP总是复制整个数据库。在处理数TB数据时,此过程可能需要大量时间,尤其会对节点和群集重新启动产生不利影响,并为重做日志留出更多空间。现在,LCP不再需要这么做 - 相反,LCP现在默认只保存自上次LCP以来更改的记录加上所有记录的四分之一。

    作为此更改的一部分,此版本中生成了两个新的数据节点配置参数:( EnablePartialLcp 默认true或启用)可启用部分LCP。 RecoveryWork 控制给予LCPs的空间的百分比; 它随着重启期间LCP必须执行的工作量而增加,而不是在正常操作期间执行的工作量。提高此值会导致正常操作期间的LCP需要写入更少的记录,从而减少通常的工作量。提高此值也意味着重新启动可能需要更长的时间。

    您必须通过设置明确禁用部分LCP EnablePartialLcp=false这使用最少量的磁盘,但也倾向于最大化LCP的写入负载。要在正常操作期间优化LCP的最低工作负载,请使用 EnablePartialLcp=trueRecoveryWork=100要为部分LCP使用最少磁盘空间,但使用有限写入,请使用 EnablePartialLcp=trueRecoveryWork=25,这是最小值 RecoveryWork缺省值是 EnablePartialLcp=trueRecoveryWork=50的,这意味着LCP文件需要约1.5倍 DataMemory; 运用 CompressedLcp=1,这可以进一步减少一半。使用默认设置的恢复时间也应该比EnablePartialLcp设置 时快得多 false

    此外,数据节点的配置参数 BackupDataBufferSizeBackupWriteSizeBackupMaxWriteSize 现在都过时了,并须移走在将来的MySQL NDB Cluster发行。

    作为此增强功能的一部分,已完成了一些工作,以解决节点重新启动时的几个问题,其中可能在各种情况下耗尽撤消日志,通常在恢复在密集时段内长时间关闭的节点时写活动。

    进行了额外的工作,通过在此过程中更新LCP监视程序,并且更好地跟踪磁盘数据同步的进度,在不超时的情况下提高长时间同步的数据节点存活率。以前,如果同步时间超过LCP看门狗超时,则可能会发生虚假警告或甚至节点故障。

    在规划部分LCP的磁盘使用情况时,请记住,在恢复期间,仍然需要完全恢复数据库。这意味着初始节点重启仍然需要完整的LCP; 部分LCP不能用于此目的。

    重要

    将使用磁盘数据表的NDB群集升级到NDB 7.6.4或将其从NDB 7.6.4降级时,需要使用重新启动所有数据节点 --initial

  • 并行撤消日志记录处理。  以前,数据节点LGMAN内核块依次处理撤销日志记录; 现在这是并行完成的。将撤销记录移交给LDM线程的rep线程等待LDM在取回下一个记录之前完成应用记录; 现在rep线程不再等待,而是立即进入下一个记录和LDM。

    LGMAN保存 每个LDM中未完成日志记录的数量,并在LDM完成记录执行时递减。属于一个页面的所有记录都被发送到相同的LDM线程,但不能保证按顺序处理,所以具有未完成记录的页面的哈希映射会为每个页面维护一个队列。当页面在页面缓存中可用时,队列中待处理的所有记录按顺序应用。

    有几个类型的记录不断被串行处理: UNDO_LCPUNDO_LCP_FIRSTUNDO_LOCAL_LCPUNDO_LOCAL_LCP_FIRSTUNDO_DROP,和 UNDO_END

    与此性能增强直接相关的功能中没有用户可见的更改; 这是正在完成的工作的一部分,以改进撤销长时间处理以支持NDB Cluster 7.6.4中的部分本地检查点。

  • 从撤消日志申请者的范围中读取表格和片段ID。  在应用撤消日志时,需要从页面ID中获取表ID和片段ID。这是通过PGMAN使用额外的PGMAN工作线程内核块中 读取页面完成的 ,但是在应用撤消日志时,需要再次读取页面。

    O_DIRECT因为页面没有被缓存在操作系统内核中,所以 使用这种方法效率很低。为了纠正这个问题,现在使用来自扩展头标的信息来完成从页面标识到表格标识和片段标识的映射,这些信息来自给定扩展区域内使用的页面的表ID和片段标识。扩展页面总是存在于页面缓存中,因此执行映射时不需要额外的磁盘读取操作。另外,使用现有的TSMAN 内核块数据结构可以读取这些信息

    有关ODirect更多信息,请参阅 数据节点配置参数的说明。

  • NDB集群自动安装程序的改进。  在NDB 7.6.4中,自动安装程序中找到的节点配置参数,其默认值及其文档与NDB集群软件版本中的相匹配。SSH支持和配置也得到了改进。另外,HTTPS现在默认用于Web连接,并且Cookie不再被用作持久数据存储机制。接下来的几段将给出有关Auto-Installer中这些和其他更改的更多信息。

    自动安装程序现在实现了一种设置采用离散值的配置参数的机制。例如,数据节点参数 Arbitration现在必须设置为其允许值之一 DefaultDisabledWaitExternal

    自动安装程序现在还可以获取并显示每台主机到群集的可用磁盘空间量(as DiskFree),并使用此信息获取取决于该配置参数的实际值。

    NDB Cluster 7.6.4中已更新或改进了MySQL NDB集群自动安装程序中的安全连接支持,如下所示:

    • 添加了一种为每个主机设置SSH成员身份的机制。

    • 将Paramiko Python模块更新到最新版本(2.6.1)。

    • 在GUI中为加密的私钥密码提供了一个位置,并停止使用硬编码的密码,如Password=None

    NDB 7.6.4中实施的与数据安全相关的其他增强功能包括:

    • 停止使用Cookie作为NDB集群配置信息的持久存储; 这些都是不安全的,并且存储硬限制上限。现在,Auto-Installer为此使用一个加密文件。

    • 为了确保用户的Web浏览器中的JavaScript前端与后端的Python Web服务器之间的数据传输安全,默认的通信协议已从HTTP切换到HTTPS。

    有关更多信息请参见第21.2.1节“NDB群集自动安装程序”

21.1.5使用InnoDB的MySQL服务器与NDB集群的比较

MySQL服务器在存储引擎中提供了许多选择。由于双方NDBInnoDB可以作为事务的MySQL存储引擎,MySQL服务器的用户有时会感兴趣的NDB集群。他们认为 NDB这是InnoDBMySQL 5.7中的默认存储引擎的替代或升级虽然NDBInnoDB共享共同特征,但体系结构和实现方式有所不同,因此现有的一些MySQL服务器应用程序和使用场景可能非常适合NDB群集,但不是全部。

在本节中,我们将讨论和比较NDBNDB 7.5 InnoDB使用存储引擎与MySQL 5.7中使用的一些特性接下来的几节提供技术比较。在许多情况下,关于何时何地使用NDB Cluster的决定必须根据具体情况进行,并考虑到所有因素。虽然超出了本文档的范围,无法为每个可想到的使用场景提供具体内容,但我们也试图针对某些常见类型的应用程序NDB而非 InnoDB后端的相对适用性提供一些非常一般的指导

NDB Cluster 7.5使用基于MySQL 5.7 mysqld,包括对InnoDB 1.1的支持尽管可以将InnoDB表与NDB群集一起使用,但这些表不会群集。使用MySQL Server 5.7的NDB Cluster 7.5发行版中的程序或库也是不可能的,反之亦然。

虽然某些类型的通用业务应用程序可以在NDB群集或MySQL服务器上运行(很可能使用InnoDB存储引擎),但也有一些重要的体系结构和实现差异。第21.1.5.1节“NDB和InnoDB存储引擎之间的差异”提供了这些差异的总结。由于差异,一些使用场景显然更适合于一台发动机或另一台发动机; 请参见 第21.1.5.2节“NDB和InnoDB工作负载”这反过来会对更适合用于NDB的应用程序类型产生影响InnoDB请参见 第21.1.5.3节“NDB和InnoDB功能使用情况摘要”,以比较每种常用类型数据库应用程序的相对适用性。

有关的相关特征信息 NDBMEMORY存储引擎,看 何时使用MEMORY或NDB簇

有关MySQL存储引擎的更多信息 请参阅第15章,备用存储引擎。

21.1.5.1 NDB和InnoDB存储引擎的区别

NDB存储引擎采用分布式,无共享架构,这会导致它从行为不同的方式实现 InnoDB在多种方式。对于那些不习惯使用的人来说 NDB,由于其在交易,外键,表格限制和其他特性方面的分布性,可能会出现意想不到的行为。这些显示在下表中:

表21.1 InnoDB和NDB存储引擎的区别

特征 InnoDB (MySQL 5.7) NDB 7.5 / 7.6
MySQL服务器版本 5.7 5.7
InnoDB InnoDB 23年7月5日 InnoDB 23年7月5日
NDB群集版本 N / A NDB 7.5.11 / 7.6.5
存储限制 64TB 128TB(截至NDB 7.5.2)
外键
交易 所有标准类型 READ COMMITTED
MVCC 没有
数据压缩 否(可以压缩NDB检查点和备份文件)
大行支持(> 14K) 支持VARBINARYVARCHARBLOB,和 TEXT 支持BLOBTEXT列(使用这些类型存储大量数据可降低NDB性能)
复制支持 使用MySQL复制的异步和半同步复制; MySQL 组复制 NDB群集内的自动同步复制; NDB群集之间的异步复制,使用MySQL复制(不支持半同步复制)
读取操作的扩展 是(MySQL复制) 是(NDB群集中的自动分区; NDB群集复制)
写入操作的扩展 需要应用程序级分区(分片) 是(NDB群集中的自动分区对应用程序是透明的)
高可用性(HA) 内置InnoDB集群 是(专为99.999%的正常运行时间而设计)
节点故障恢复和故障切换 从MySQL组复制 自动(NDB体系结构中的关键元素)
节点故障恢复的时间 30秒或更长时间 通常<1秒
实时性能 没有
内存表 没有 是的(有些数据可以选择存储在磁盘上;内存和磁盘数据存储都是耐用的)
NoSQL访问存储引擎 是(多个API,包括Memcached,Node.js / JavaScript,Java,JPA,C ++和HTTP / REST)
并行和并行写入 多达48个写入器,针对并发写入进行了优化
冲突检测和解决(多个复制大师) 是(MySQL组复制)
哈希索引 没有
在线添加节点 使用MySQL组复制读/写副本 是(所有节点类型)
在线升级 是(使用复制)
在线架构修改 是的,作为MySQL 5.7的一部分

21.1.5.2 NDB和InnoDB工作负载

NDB集群具有一系列独特的属性,非常适合需要高可用性,快速故障切换,高吞吐量和低延迟的应用程序。由于其分布式架构和多节点实施,NDB集群还具有特定的限制,可能会使一些工作负载无法正常工作。一些在行为之间的主要差异NDBInnoDB存储引擎对于一些常见的数据库驱动的应用程序工作负载的列于下表::

表21.2 InnoDB和NDB存储引擎之间的区别,常见类型的数据驱动的应用程序工作负载。

工作量 InnoDB NDB集群(NDB
大容量OLTP应用程序
DSS应用程序(数据集市,分析) 有限公司(加入不超过3TB大小的OLTP数据集的操作)
自定义应用
打包应用程序 有限(应主要是主键访问); NDB Cluster 7.5支持外键
网络内电信应用(HLR,HSS,SDP) 没有
会话管理和缓存
电子商务应用程序
用户配置文件管理,AAA协议

21.1.5.3 NDB和InnoDB功能使用情况摘要

在比较应用程序功能要求和使用功能InnoDBNDB,有些显然比另一种存储引擎更兼容。

下表列出了根据每个功能通常更适合的存储引擎支持的应用程序功能。

表21.3根据每个功能通常更适合的存储引擎支持的应用程序功能

优先申请要求 InnoDB 优先申请要求 NDB
  • 外键

    注意

    NDB Cluster 7.5支持外键

  • 全表扫描

  • 非常大的数据库,行或事务

  • 除了 READ COMMITTED

  • 写缩放

  • 正常运行时间99.999%

  • 在线添加节点和联机模式操作

  • 多个SQL和NoSQL API(请参阅 NDB群集API:概述和概念

  • 实时性能

  • 有限的BLOB使用

  • 支持外键,虽然它们的使用可能会影响高吞吐量的性能


21.1.6 NDB簇的已知限制

在接下来的部分中,我们将讨论NDB Cluster当前版本中的已知限制,MyISAM以及使用InnoDB存储引擎时可用的功能如果您http://bugs.mysql.com的MySQL bugs数据库中检查 Cluster类别,则 可以http:// bugs的MySQL bugs数据库的MySQL Server:下的以下类别中找到已知的错误.mysql.com,我们打算在即将发布的NDB集群中进行更正:

  • NDB群集

  • 群集直接API(NDBAPI)

  • 群集磁盘数据

  • 群集复制

  • ClusterJ

这些信息旨在完成上述条件。您可以使用第1.7节“如何报告错误或问题”中给出的说明来报告您遇到的任何与MySQL错误数据库的差异如果我们不打算修复NDB Cluster 7.5中的问题,我们会将其添加到列表中。

有关NDB Cluster 7.5中已解决的早期版本中的问题列表,请参阅NDB Cluster 7.3中已解决的以前的NDB群集问题

注意

第21.6.3节“NDB群集复制中的已知问题” 中描述了特定于NDB群集复制的限制和其他问题

21.1.6.1在NDB集群中不符合SQL语法

与某些MySQL功能相关的某些SQL语句在与NDB表一起使用时会产生错误,如以下列表中所述:

  • 临时表。  临时表不受支持。尝试使用NDB存储引擎创建临时表 或者更改现有临时表以使用 NDB失败,并显示错误 表存储引擎'ndbcluster'不支持创建选项'TEMPORARY'

  • NDB表中的索引和键。  NDB群集表上的密钥和索引受以下限制:

    • 列宽。  尝试在NDB宽度大于3072字节表列上创建索引会 成功,但只有前3072个字节实际用于索引。在这种情况下,警告指定密钥太长; 最大密钥长度是3072字节被发布,并且一个SHOW CREATE TABLE语句显示索引的长度为3072。

    • TEXT和BLOB列。  您不能在NDB使用任何TEXTBLOB数据类型的表列上创建索引

    • FULLTEXT索引。 NDB存储引擎不支持FULLTEXT索引,这是可能的 MyISAMInnoDB唯一的表。

      但是,您可以在表格的VARCHAR列上 创建索引 NDB

    • 使用HASH键和NULL。  在唯一键和主键中使用可为空的列意味着使用这些列的查询将作为全表扫描处理。要解决此问题,请创建该列NOT NULL,或者不使用该USING HASH 选项重新创建索引

    • 前缀。  没有前缀索引; 只有整列可以被索引。(如NDB 本节前面所述,列索引的大小始终与列的宽度(以字节为单位)相同,最多可包含3072个字节,另请参见 第21.1.6.6节“NDB集群中不支持或缺失的功能”,以获取更多信息。)

    • BIT列。 BIT列不能是一个主键,唯一键,或指数,也不能是复合主键,唯一键,或索引的一部分。

    • AUTO_INCREMENT列。  像其他MySQL存储引擎一样, NDB存储引擎AUTO_INCREMENT每个表最多可以处理一 列。但是,对于没有明确主键的NDB表,AUTO_INCREMENT 列会自动定义并用作 隐藏主键。由于这个原因,您不能定义一个具有明确AUTO_INCREMENT的表, 除非该列也是使用该PRIMARY KEY选项声明的试图用一个表创建一个表AUTO_INCREMENT列不是表的主键,并且使用 NDB存储引擎失败并出现错误。

  • 对外键的限制。  对NDB 7.5中的外键约束的支持与提供的外键约束相当 InnoDB,但受到以下限制:

    • 如果不是表的主键,那么引用为外键的每列都需要显式唯一键。

    • ON UPDATE CASCADE 在引用父表的主键时不受支持。

      这是因为主键的更新实现为删除旧行(包含旧主键)以及插入新行(使用新主键)。这对于NDB内核来说是不可见的 ,它将这两行视为相同,因此无法知道这个更新应该级联。

    • SET DEFAULT不受支持。(也不支持InnoDB。)

    • NO ACTION关键字被接受,但作为治疗RESTRICT(也是一样InnoDB。)

    • 在早期版本的NDB集群中,当使用外键引用另一个表中的索引创建表时,即使索引中列的顺序不匹配,有时也可能创建外键,这是因为适当的错误并不总是在内部返回。针对此问题的部分修复改善了大多数情况下内部使用的错误; 但是,如果父索引是唯一索引,则可能会出现这种情况。(错误#18094360)

    • 在NDB 7.5.6之前,当使用外键添加或删除外键时ALTER TABLE,父表的元数据不会更新,这可能会导致后续对ALTER TABLE父应执行无效的语句。要解决此问题,请SHOW CREATE TABLE在添加或删除外键后立即在父表上执行 ; 这会强制重新加载父代的元数据。

      NDB 7.5.6中修复了此问题。(错误#82989,错误#24666177)

    有关更多信息,请参见 第13.1.18.6节“使用FOREIGN KEY约束”第1.8.3.2节“FOREIGN KEY约束”

  • NDB簇和几何数据类型。 表格支持 几何数据类型(WKTWKBNDB但是,不支持空间索引。

  • 字符集和二进制日志文件。  目前,ndb_apply_statusndb_binlog_index表是使用latin1(ASCII)字符集创建的。由于二进制日志的名称记录在此表中,因此在这些表中未正确引用使用非拉丁字符命名的二进制日志文件。这是一个我们正在努力解决的已知问题。(错误#50226)

    要解决此问题,命名二进制日志文件或设置任何时候只使用Latin-1字符 --basedir--log-bin--log-bin-index选择。

  • 使用用户定义的分区创建NDB表。  对NDB集群中用户定义分区的支持仅限于[ LINEAR] KEY分区。使用其他的分区类型用ENGINE=NDBENGINE=NDBCLUSTERCREATE TABLE一个错误的语句的结果。

    可以覆盖此限制,但这样做不适用于生产设置。有关详细信息,请参阅用户定义的分区和NDB存储引擎(NDB群集)

    默认分区方案。  默认情况下,通过KEY使用表主键作为分区键对所有NDB簇表进行 分区。如果没有为表格明确设置主键,则会使用存储引擎自动创建隐藏主键 NDB有关这些及相关问题的更多讨论,请参见第22.2.5节“密钥分区”

    CREATE TABLE并且 ALTER TABLE会导致用户分区 NDBCLUSTER表不符合以下两个要求中的任何一个或两个的声明是不允许的,并且会失败并显示错误:

    1. 该表必须具有明确的主键。

    2. 表的分区表达式中列出的所有列必须是主键的一部分。

    例外。  如果NDBCLUSTER使用空列列表(即使用PARTITION BY [LINEAR] KEY()创建用户分区 ,则不需要明确的主键。

    NDBCLUSTER表的最大分区数。 NDBCLUSTER使用用户定义的分区时 ,可为 表定义的最大分区数是每个节点组8个。(有关NDB群集节点组的更多信息请参见第21.1.2节“NDB群集节点,节点组,副本和分区”

    DROP PARTITION不支持。  无法NDB使用表表中 删除分区 ALTER TABLE ... DROP PARTITION其他分区扩展名为 ALTER TABLE- ADD PARTITIONREORGANIZE PARTITIONCOALESCE PARTITION- 支持NDB表,但使用复制,因此未进行优化。请参见第22.3.1节“RANGE和LIST分区的管理”第13.1.8节“ALTER TABLE语法”

  • 基于行的复制。  在NDB群集中使用基于行的复制时,不能禁用二进制日志记录。也就是说, NDB存储引擎会忽略其值sql_log_bin

  • JSON数据类型。 NDB 7.5.2及更高版本提供mysqld中的表格 JSON支持 MySQL 数据类型NDB

    一个NDB表最多可以有3 JSON列。

    NDB API没有特别的规定来处理 JSON数据,它只是将BLOB数据视为 数据。处理数据 JSON必须由应用程序执行。

  • CPU和线程信息ndbinfo表。  NDB 7.5.2向ndbinfo信息数据库添加了几个新表, 提供有关节点,线程ID和线程类型的CPU和线程活动的信息。表格在这里列出:

    • cpustat:提供每秒,每线程CPU统计信息

    • cpustat_50ms:原始每线程CPU统计数据,每50ms收集一次

    • cpustat_1sec:每秒收集的原始每线程CPU统计数据

    • cpustat_20sec:原始每线程CPU统计数据,每20秒收集一次

    • threads:线程类型的名称和描述

    有关这些表的更多信息,请参见 第21.5.10节“ndbinfo:NDB群集信息数据库”

  • 锁定信息ndbinfo表。  NDB 7.5.3将新表添加到 ndbinfo信息数据库中,提供有关正在运行的NDB群集中的锁定和锁定尝试的信息。这些表格在这里列出:

21.1.6.2来自标准MySQL限制的NDB集群的限制和差异

在本节中,我们列出了在NDB集群中发现的限制,这些限制不同于标准MySQL中找到的或在标准MySQL中找不到的限制。

内存使用和恢复。  将数据插入NDB表格时消耗的内存 在删除时不会自动恢复,这与其他存储引擎相同。相反,以下规则适用:

  • 表中DELETE语句 NDB使得被删除的行以前使用的内存仅可用于同一表上的插入。但是,这种内存可以通过执行来提供一般重用 OPTIMIZE TABLE

    群集的滚动重新启动也释放被删除行使用的任何内存。请参见 第21.5.5节“执行NDB群集的滚动重新启动”

  • DROP TABLETRUNCATE TABLE上的操作NDB表释放的是使用由该表用于通过任何再使用所述存储器 NDB或者由同一个表或由另一个表,NDB表中。

    注意

    回想一下,TRUNCATE TABLE 删除并重新创建表。请参见 第13.1.34节“TRUNCATE TABLE语法”

  • 集群配置施加的限制。  存在许多可配置的硬限制,但群集中可用的主存储器设置了限制。请参见第21.3.3节“NDB群集配置文件”中的配置参数的完整列表 大多数配置参数可以在线升级。这些严格的限制包括:

  • 节点和数据对象的最大值。  以下限制适用于群集节点和元数据对象的数量:

    • 数据节点的最大数量是48。

      数据节点必须具有1到48(含)的节点ID。(管理和API节点可以使用1到255之间的节点ID,包括1和255)。

    • NDB集群中最大节点总数为255.该数字包括所有SQL节点(MySQL服务器),API节点(访问除MySQL服务器以外的集群的应用程序),数据节点和管理服务器。

    • 当前版本NDB群集中元数据对象的最大数量为20320.此限制是硬编码的。

    有关更多信息,请参阅NDB群集7.3中已解决的以前的NDB群集问题

21.1.6.3有关NDB集群中事务处理的限制

NDB集群在处理交易方面存在一些限制。这些包括以下内容:

  • 事务隔离级别。  NDBCLUSTER存储引擎只支持READ COMMITTED事务隔离级别。InnoDB,例如,支持 READ COMMITTEDREAD UNCOMMITTEDREPEATABLE READ,和 SERIALIZABLE。)你应该记住,NDB实现 READ COMMITTED在每行的基础; 当读请求到达存储该行的数据节点时,返回的是当时该行的最后提交版本。

    未提交的数据永远不会返回,但是当修改大量行的事务与读取相同行的事务同时落实时,执行读取的事务可以针对这些行中的不同行观察之前 值,之后值或两者这是由于在另一个事务提交之前或之后可以处理给定的行读取请求。

    为了确保给定的事务只在值之前或之后读取,可以使用强制行锁 SELECT ... LOCK IN SHARE MODE在这种情况下,锁一直持续到拥有交易被提交。使用行锁还可能导致以下问题:

    • 锁等待超时错误的频率增加,并发性降低

    • 由于读取需要提交阶段而增加的事务处理开销

    • 可能耗尽可用数量的并发锁,这受限于 MaxNoOfConcurrentOperations

    NDB使用READ COMMITTED用于所有读取,除非改性剂如 LOCK IN SHARE MODEFOR UPDATE使用。LOCK IN SHARE MODE导致共享行锁使用; FOR UPDATE会导致使用独占行锁。独特的密钥读取自动升级其锁NDB以确保自我一致的读取; BLOB读取也采用额外的锁定来保持一致性

    有关NDB群集的事务隔离级别实现如何影响数据库备份和还原的信息请参见第21.5.3.4节“NDB群集备份故障排除”NDB

  • 事务和BLOB或TEXT列。  NDBCLUSTER只存储使用MySQL 可见表中任何MySQL BLOBTEXT数据类型的列值的一部分 ; BLOBor 的其余部分 TEXT存储在MySQL无法访问的单独的内部表中。这引起了两个相关的问题,每当SELECT在包含这些类型的列的表上执行语句时,您应该知道这两个相关问题

    1. 对于SELECT来自NDB簇表的任何数据:如果 SELECT包含a BLOBTEXT列,则将 READ COMMITTED 事务隔离级别转换为带读锁定的读取。这样做是为了保证一致性。

    2. 对于任何SELECT使用唯一键查找来检索任何使用任何一种BLOBTEXT数据类型并在事务中执行的列的公共读锁,在该事务持续时间内都会保留在该表上 - 也就是说,直到事务要么承诺要么中止。

      对于使用索引或表扫描的查询,即使对NDB具有BLOBTEXT列的也不会发生此问题

      例如,考虑t 由以下CREATE TABLE语句定义的表格

      CREATE TABLE t(
          INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
          b INT NOT NULL,
          c INT NOT NULL,
          d TEXT,
          指数I(b),
          唯一密钥u(c)
      )ENGINE = NDB,
      

      以下任一查询t 都会导致共享读取锁定,因为第一个查询使用主键查找,第二个查询使用唯一键查找:

      SELECT * FROM t WHERE a = 1;
      
      SELECT * FROM t WHERE c = 1;
      

      但是,这里显示的四个查询都没有导致共享读锁:

      SELECT * FROM t WHERE b = 1;
      
      SELECT * FROM t WHERE d ='1';
      
      SELECT * FROM t;
      
      SELECT b,c WHERE a = 1;
      

      这是因为,在这四个查询中,第一个使用索引扫描,第二个和第三个使用表扫描,而第四个使用主键查找时,不检索任何BLOBTEXT的值

      通过避免使用检索BLOBTEXT专用密钥查找的查询,或者在不能避免此类查询的情况下,尽可能快地提交事务,可以帮助最大限度地减少共享读锁的问题

  • 回滚。  没有部分交易,也没有交易的部分回滚。重复密钥或类似错误会导致整个事务回滚。

    这种行为与其他事务性存储引擎的行为不同,例如InnoDB 可能会回滚单个语句。

  • 事务和内存使用情况。  如本章其他地方所述,NDB集群不能很好地处理大型交易; 最好用少量操作来执行大量小事务,而不是尝试包含大量操作的单个大事务。除其他考虑外,大型事务需要非常大量的内存。因此,大量MySQL语句的事务行为会受到影响,如以下列表中所述:

    • TRUNCATE TABLENDB表上使用时不是事务性的 如果a TRUNCATE TABLE没有清空表格,那么它必须重新运行直到成功。

    • DELETE FROM(即使没有 WHERE条款)也是 事务性的。对于包含大量行的表,你会发现性能得到了几种改进的DELETE FROM ... LIMIT ... 语句的删除操作。如果您的目标是清空桌子,那么您可能希望TRUNCATE TABLE改用它。

    • LOAD DATA语句。  LOAD DATA INFILENDB表上使用时不是事务性的

      重要

      执行 LOAD DATA INFILE语句时, NDB引擎以不规则的间隔执行提交,以更好地利用通信网络。提前知道发生此类犯罪是不可能的。

    • ALTER TABLE和事务。  当复制一个NDB表作为的一部分时ALTER TABLE,副本的创建是非事务性的。(在任何情况下,删除副本时都会回滚此操作。)

  • 事务和COUNT()函数。  使用NDB群集复制时,不能保证COUNT()从站上功能的事务一致性 换句话说,当在主机上执行一系列更改单个事务中的表中的行数的语句(INSERTDELETE或两者)时,在从属设备上执行查询可能会产生中间结果。这是由于可能执行脏读,而不是存储引擎中的错误 (有关更多信息,请参见错误#31321。) SELECT COUNT(*) FROM tableSELECT COUNT(...)NDB

21.1.6.4 NDB集群错误处理

启动,停止或重新启动节点可能会导致临时错误,导致某些事务失败。这些包括以下情况:

  • 临时错误。  首次启动节点时,可能会看到错误1204 临时失败,分配已更改以及类似的临时错误。

  • 由于节点故障导致的错误。  任何数据节点的停止或失败都可能导致许多不同的节点失败错误。(但是,在执行群集的计划关闭时,不应该中止事务。)

在这两种情况中,任何生成的错误都必须在应用程序中处理。这应该通过重试交易来完成。

另请参见第21.1.6.2节“来自标准MySQL限制的NDB集群的限制和差异”

21.1.6.5 NDB集群中与数据库对象关联的限制

使用NDBCLUSTER存储引擎时,某些数据库对象(如表和索引)具有不同的限制

  • 数据库和表名。  使用NDB存储引擎时,数据库名称和表名称的最大允许长度为63个字符。使用数据库名称或表名称长于此限制的语句会失败并显示相应的错误。

  • 数据库对象的数量。 单个NDB群集中所有 NDB数据库对象(包括数据库,表和索引) 的最大数量限制为20320。

  • 每个表的属性。  属于给定表的属性(即列和索引)的最大数量为512。

  • 每个键的属性。  每个键的最大属性数为32。

  • 行大小。  任何一行的最大允许大小是14000字节。每个BLOBTEXT列对此总共贡献256 + 8 = 264个字节。

  • BIT列存储每张表。 BIT给定NDB表中使用的 所有的最大组合宽度为 4096。

  • 固定列存储。  NDB Cluster 7.5和更高版本支持FIXED列中每个数据段最多128 TB (以前,这是16 GB。)

21.1.6.6 NDB群集中不支持或缺少的功能

NDB表格 不支持其他存储引擎支持的许多功能试图在NDB集群中使用任何这些功能本身不会导致错误; 但是,在希望支持或执行功能的应用程序中可能会出现错误。引用这些特征的语句即使被有效忽略 NDB,也必须在语法和其他方面有效。

  • 索引前缀。 NDB表格 不支持索引前缀 如果前缀是在声明用作索引规范的一部分,例如 CREATE TABLEALTER TABLE,或 CREATE INDEX,不被创建的前缀NDB

    包含索引前缀以及创建或修改NDB的语句在语法上仍然是有效的。例如,以下语句总是失败,错误1089 不正确的前缀键; 所使用的密钥部分不是字符串,使用的长度比密钥部分长,或者存储引擎不支持唯一的前缀密钥,与存储引擎无关:

    CREATE TABLE t1(
        c1 INT NOT NULL,
        c2 VARCHAR(100),
        INDEX i1(c2(500)) 
    );

    这发生在SQL语法规则的基础上,即没有索引可能具有比其本身更大的前缀。

  • 保存点和回滚。  保存点和回退到保存点被忽略,如 MyISAM

  • 提交的耐久性。  磁盘上没有持久的提交。提交已复制,但不能保证在提交时将日志刷新到磁盘。

  • 复制。  不支持基于语句的复制。在设置群集复制时使用 --binlog-format=ROW(或 --binlog-format=MIXED)。有关更多信息请参见 第21.6节“NDB群集复制”

    使用全局事务标识符(GTID)的复制与NDB群集不兼容,并且在NDB Cluster 7.5或NDB CLuster 7.6中不受支持。在使用NDB存储引擎时不要启用GTID ,因为这很可能会导致直到NDB群集复制失败的问题。

    NDB群集不支持半同步复制。

  • 生成的列。 NDB存储引擎不支持虚拟生成列的索引。

    与其他存储引擎,你可以创建一个存储生成列的索引,但你应该在牢记 NDB使用 DataMemory的生成列的存储以及 IndexMemory用于索引。例如,请参阅 NDB群集中的JSON列和间接索引

    NDB群集将存储生成的列中的更改写入二进制日志,但不会记录到虚拟列的日志。这不应该影响NDB群集复制或NDB其他MySQL存储引擎之间的复制

注意

请参阅第21.1.6.3节“与NDB集群中的事务处理有关的限制,以获取有关事务处理限制的更多信息NDB

21.1.6.7有关NDB集群性能的限制

以下性能问题在NDB集群中具体或特别明显:

  • 范围扫描。  由于顺序访问NDB存储引擎而导致查询性能问题; 进行多次范围扫描的费用相对于其中的任何一项MyISAM两项都相对昂贵 InnoDB

  • 范围内记录的可靠性。 Records in range统计是有的,但没有完全测试或正式支持。在某些情况下,这可能会导致非最佳的查询计划。如有必要,您可以采用USE INDEXFORCE INDEX改变执行计划。有关如何执行此操作的更多信息请参见第8.9.4节“索引提示”

  • 独特的散列索引。 USING HASH如果NULL作为密钥的一部分给出,则使用 创建的唯一散列索引不能用于访问表

21.1.6.8 NDB集群专有的问题

以下是特定于NDB存储引擎的限制

  • 机器结构。  群集中使用的所有机器必须具有相同的体系结构。也就是说,托管节点的所有机器必须是大端或小端,并且不能混合使用两者。例如,您不能在PowerPC上运行一个管理节点,该PowerPC指示在x86计算机上运行的数据节点。此限制不适用于仅运行 可能访问群集的SQL节点的mysql或其他客户端的机器

  • 二进制日志记录。  NDB集群在二进制日志记录方面存在以下限制或限制:

  • 在任何数据节点重新启动时,架构操作(DDL语句)都会被拒绝。

  • 复制品数量。 NoOfReplicas数据节点配置参数确定的副本 数是NDB群集存储的所有数据的副本数。将此参数设置为1意味着只有一个副本; 在这种情况下,不提供冗余,并且数据节点的丢失导致数据丢失。为保证冗余,即使数据节点出现故障,也要保留数据,请将此参数设置为2,这是生产中的默认值和建议值。

    可以设置NoOfReplicas 为大于2的值(最大值为4),但不必防止数据丢失。此外, 生产中不支持此参数大于2的值

另请参见 第21.1.6.10节“有关多个NDB群集节点的限制”

21.1.6.9有关NDB集群磁盘数据存储的限制

磁盘数据对象的最大值和最小值。  磁盘数据对象受限于以下最大值和最小值:

  • 最大桌面空间数量:2 32(4294967296)

  • 每个表空间的最大数据文件数:2 16(65536)

  • 表空间数据文件的最小和最大可能扩展大小分别为32K和2G。有关更多信息请参见 第13.1.19节“CREATE TABLESPACE语法”

另外,在使用NDB磁盘数据表时,您应该了解以下与数据文件和扩展盘有关的问题:

  • 数据文件使用 DataMemory用法与内存数据相同。

  • 数据文件使用文件描述符。请记住,数据文件始终处于打开状态,这意味着文件描述符始终处于使用状态,无法重新用于其他系统任务。

  • 范围需要足够的 DiskPageBufferMemory; 您必须为此参数预留足够的空间,以考虑所有扩展数据使用的所有内存(扩展数量乘以扩展数据大小)。

磁盘数据表和无盘模式。  以无盘模式运行群集时,不支持使用磁盘数据表。

21.1.6.10有关多个NDB群集节点的限制

多个SQL节点。  以下是与使用多个MySQL服务器作为NDB集群SQL节点有关的问题,并且是特定于 NDBCLUSTER存储引擎的问题:

  • 没有分布式表锁。  一个LOCK TABLES仅适用于在发出锁的SQL节点; 集群中没有其他SQL节点看到此锁。对于任何将表锁定为其操作一部分的语句所发出的锁也是如此。(有关示例,请参阅下一个项目。)

  • ALTER TABLE操作。  ALTER TABLE在运行多个MySQL服务器(SQL节点)时未完全锁定。(如前面的讨论,NDB集群不支持分布式表锁。)

多个管理节点。  使用多个管理服务器时:

  • 如果任何管理服务器在同一主机上运行,​​则必须为连接字符串中的节点指定显式ID,因为节点ID的自动分配在同一主机上的多个管理服务器上不起作用。如果每个管理服务器都驻留在不同的主机上,则这不是必需的。

  • 当管理服务器启动时,它首先检查同一NDB群集中的任何其他管理服务器,并在成功连接到其他管理服务器时使用其配置数据。这意味着管理服务器--reload--initial启动选项将被忽略,除非管理服务器是唯一正在运行的服务器。这也意味着,在执行具有多个管理节点的NDB群集的滚动重启时,管理服务器在(且仅当)它是在此NDB群集中运行的唯一管理服务器时读取其自己的配置文件。请参见 第21.5.5节“执行NDB群集的滚动重新启动”, 了解更多信息。

多个网络地址。  不支持每个数据节点的多个网络地址。使用这些可能会导致问题:在发生数据节点故障时,SQL节点会等待确认数据节点已关闭但从未收到它,因为到该数据节点的另一路由保持打开状态。这可以有效地使群集不可操作。

注意

对于单个数据节点, 可以使用多个网络硬件 接口(如以太网卡),但这些接口必须绑定到相同的地址。这也意味着不可能[tcp]config.ini文件中为每个连接使用多个 部分 有关更多信息请参见 第21.3.3.10节“NDB群集TCP / IP连接”

21.2 NDB群集安装

本节介绍规划,安装,配置和运行NDB群集的基础知识。而在示例中 第21.3节,“NDB集群配置”提供了多种集群选项和配置更深入的信息,下面的指导方针和这里列出程序的结果应该是一个可用的NDB簇满足了 最低的要求数据的可用性和安全性。

有关在发行版本之间升级或降级NDB集群的信息,请参见 第21.2.8节“升级和降级NDB集群”

本节涵盖硬件和软件要求; 网络问题; NDB集群的安装; 基本配置问题; 启动,停止和重新启动集群; 加载示例数据库; 并执行查询。

NDB Cluster 7.5和更高版本还提供NDB Cluster Auto-Installer,一种基于Web的图形安装程序,作为NDB Cluster分发的一部分。自动安装程序可用于在一台(用于测试)或多台主机上执行NDB群集的基本安装和设置。有关更多信息请参见 第21.2.1节“NDB群集自动安装程序”

假设。  以下各节对群集的物理和网络配置做了大量假设。接下来的几段将讨论这些假设。

群集节点和主机。  该群集由四个节点组成,每个节点位于单独的主机上,每个节点在典型的以太网网络上都有一个固定的网络地址,如下所示:

表21.4示例群集中节点的网络地址

节点 IP地址
管理节点(mgmd 198.51.100.10
SQL节点(mysqld 198.51.100.20
数据节点“A”(ndbd 198.51.100.30
数据节点“B”(ndbd 198.51.100.40

该设置也显示在下图中:

图21.4 NDB群集多计算机设置

Most content is described in the surrounding text. The four nodes each connect to a central switch that connects to a network.

网络寻址。  在简单(和可靠性)的利益,这种 操作方法仅使用数字IP地址。但是,如果网络上有DNS解析功能,则可以在配置群集时使用主机名来代替IP地址。或者,您可以使用该hosts 文件(通常/etc/hosts用于Linux和其他类Unix操作系统, C:\WINDOWS\system32\drivers\etc\hosts在Windows上或您的操作系统的等效文件中),以提供用于执行主机查找的方法(如果可用)。

潜在的主机文件问题。  尝试为群集节点使用主机名时出现一个常见问题,这是因为某些操作系统(包括某些Linux发行版)/etc/hosts在安装过程中设置了系统自己的主机名的方式考虑两台具有主机名称的机器, ndb1并且ndb2都在 cluster网络域中。Red Hat Linux(包括一些衍生产品,如CentOS和Fedora)将以下条目放入这些机器的 /etc/hosts文件中:

#ndb1 /etc/hosts
127.0.0.1 ndb1.cluster ndb1 localhost.localdomain localhost
#ndb2 /etc/hosts
127.0.0.1 ndb2.cluster ndb2 localhost.localdomain localhost

SUSE Linux(包括OpenSUSE)将这些条目放入机器的/etc/hosts文件中:

#ndb1 /etc/hosts
127.0.0.1 localhost
127.0.0.2 ndb1.cluster ndb1
#ndb2 /etc/hosts
127.0.0.1 localhost
127.0.0.2 ndb2.cluster ndb2

在两种情况下,到回环IP地址的ndb1路由 ndb1.cluster,但从DNS获取公共IP地址ndb2.cluster,而ndb2路由ndb2.cluster 到回环地址并获取公共地址 ndb1.cluster结果是每个数据节点都连接到管理服务器,但无法知道任何其他数据节点何时连接,因此数据节点在启动时似乎挂起。

警告

您不能混入localhost其他主机名或IP地址config.ini出于这些原因,这种情况下的解决方案(除了为所有 config.ini HostName 条目使用IP地址之外)是为所有群集主机移除全限定主机名 /etc/hosts并将其用于其中 config.ini

主机类型。  我们安装场景中的每台主机都是一台基于Intel的台式机,运行的支持的操作系统以标准配置安装到磁盘,并且不会运行不必要的服务。具有标准TCP / IP网络功能的核心操作系统应该足够。同样为了简单起见,我们还假定所有主机上的文件系统都是相同的。如果不是,则应相应地修改这些说明。

网络硬件。  每台计算机上都安装了标准的100 Mbps或1千兆以太网卡,以及适当的卡驱动程序,并且所有四台主机都通过标准问题以太网网络设备(如交换机)连接。(所有机器应该使用吞吐量相同的网卡,即集群中所有四台机器都应该有100 Mbps卡, 或者所有四台机器都应该有1 Gbps卡。)NDB集群工作在100 Mbps网络中; 然而,千兆以太网提供更好的性能。

重要

NDB群集不适用于吞吐量低于100 Mbps或经历高度延迟的网络。出于这个原因(其中包括),尝试在诸如因特网等广域网上运行NDB集群不太可能成功,并且在生产中不受支持。

样本数据。  我们使用world可从MySQL网站下载的数据库(请参阅 http://dev.mysql.com/doc/index-other.html)。我们假设每台机器都有足够的内存用于运行操作系统,所需的NDB群集进程以及(在数据节点上)存储数据库的内存。

有关安装MySQL的一般信息,请参阅 第2章安装和升级MySQL有关在Linux和其他类Unix操作系统上安装NDB集群的信息,请参见 第21.2.2节“在Linux上安装NDB集群”有关在Windows操作系统上安装NDB群集的信息,请参见 第21.2.3节“在Windows上安装NDB群集”

有关NDB群集硬件,软件和网络要求的一般信息,请参见 第21.1.3节“NDB群集硬件,软件和网络要求”

21.2.1 NDB集群自动安装程序

本节介绍作为NDB集群分配一部分的基于Web的图形配置安装程序。讨论的主题包括安装程序及其部件的概述,运行安装程序的软件和其他要求,浏览GUI以及使用安装程序在一台或多台主机上设置和启动或停止NDB群集。

21.2.1.1 NDB集群自动安装程序要求

本节提供有关支持的操作平台和软件,所需软件以及运行NDB群集自动安装程序的其他先决条件的信息。

支持的平台。  对于最新版本的Linux,Windows,Solaris和MacOS X,NDB群集自动安装程序可用于大多数NDB 7.5.2及更高版本的NDB群集分发。有关NDB群集和NDB群集自动安装程序的平台支持的更多详细信息请参阅 http://www.mysql.com/support/supportedplatforms/cluster.html

NDB集群自动安装程序不受NDB 7.5.0或7.5.1(错误#79853,错误#22502247)的支持。

支持的Web浏览器。  最新版本的Firefox和Microsoft Internet Explorer支持基于Web的安装程序。还应该与最新版本的歌剧,Safari和Chrome的工作,尽管我们还没有彻底地与这些浏览器保持兼容测试。

所需的软件设置主机。  运行自动安装程序的主机上必须安装以下软件:

  • Python 2.6或更高版本。  Auto-Installer需要Python解释器和标准库。如果系统中尚未安装这些软件,则可以使用系统的软件包管理器添加它们。否则,可以从http://python.org/download/下载它们

  • Paramiko 1.7.7.1或更高。  这是使用SSH与远程主机进行通信所必需的。你可以从http://www.lag.net/paramiko/下载它 Paramiko也可以从系统的软件包管理器中获得。

  • Pycrypto 2.6或更高版本。  Paramiko需要此密码模块。如果无法使用系统的软件包管理,可以从https://www.dlitz.net/software/pycrypto/下载它

上述列表中的所有软件均包含在配置工具的Windows版本中,不需要单独安装。

仅当您打算在远程主机上部署NDB群集节点时,才需要Paramiko和Pycrypto库,如果所有节点都位于运行安装程序的相同主机上,则不需要该库。

所需的软件 - 远程主机。  您希望部署NDB群集节点的远程主机所需的唯一软件是SSH服务器,它通常默认安装在Linux和Solaris系统上。Windows有几种可选方案; 有关这些概述,请参阅 http://en.wikipedia.org/wiki/Comparison_of_SSH_servers

使用多个主机时的另一个要求是,可以使用SSH和适当的密钥或用户凭证对任何远程主机进行身份验证,如以下几段所述:

身份验证和安全。  Auto-Installer提供了三种远程访问的基本安全或认证机制,我们在此列出并描述:

  • SSH。  安全的shell连接用于使后端能够在远程主机上执行操作。出于这个原因,SSH服务器必须在远程主机上运行。另外,运行安装程序的系统用户必须有权访问远程服务器,可以使用用户名和密码,也可以使用公钥和私钥。

    重要

    您绝对不应该使用系统root 帐户进行远程访问,因为这是非常不安全的。另外,mysqld通常不能由系统启动root由于这些和其他原因,您应该为目标系统上的常规用户帐户提供SSH凭据,而不是为系统提供SSH凭据root有关此问题的更多信息,请参见第6.1.5节“如何以普通用户身份运行MySQL”

  • HTTPS。  Web浏览器前端和后端之间的远程通信默认情况下不进行加密,这意味着诸如用户的SSH密码等信息以明文传输,任何人都可以阅读。对于来自远程客户端的加密通信,后端必须有证书,并且前端必须使用HTTPS而不是HTTP与后端进行通信。启用HTTPS通过发布自签名证书最容易实现。证书颁发后,您必须确保它已被使用。你可以通过启动ndb_setup.py来做到这一点从与命令行 --use-https--cert-file选项。

  • 基于证书的认证。  后端ndb_setup.py进程可以在本地主机以及远程主机上执行命令。这意味着任何连接到后端的人都可以负责命令的执行。要拒绝不希望的连接到后端,可能需要证书来验证客户端。在这种情况下,证书必须由用户发布,并安装在浏览器中,并可用于后端进行身份验证。您可以通过启动ndb_setup.py来制定此要求(连同或代替密码或密钥认证) --ca-certs-file 选项。

当客户端浏览器与自动安装程序后端在同一主机上运行时,无需安全验证。

另请参见第21.5.12节“NDB集群安全问题”,其中讨论了在部署NDB集群时需要考虑的安全考虑因素,以及第6章安全性以获取更一般的MySQL安全信息。

21.2.1.2 NDB群集自动安装程序概述

NDB集群自动安装程序由两个组件组成。前端是一个GUI客户端,实现为一个Web页面,可在标准Web浏览器(例如Firefox或Microsoft Internet Explorer)中加载和运行(请参见 第21.2.1.1节“NDB群集自动安装程序要求”)。后端是一个服务器进程(ndb_setup.py),运行在本地机器上或您有权访问的另一台主机上。

这两个组件(客户端和服务器)使用标准的HTTP请求和响应相互通信。后端可以在后端用户授权访问的任何主机上管理NDB Cluster软件程序。如果NDB群集软件位于不同的主机上,则后端依靠SSH进行访问,使用Paramiko库远程执行命令(请参见 第21.2.1.1节“NDB群集自动安装程序要求”)。

本节的其余部分主要关注Web客户端。有关使用命令行工具的更多信息,请参见第21.4.27节“ ndb_setup.py - 启动基于浏览器的NDB集群自动安装程序”

NDB集群自动安装界面。  本节介绍NDB群集自动安装程序的布局和导航,其欢迎屏幕与Web浏览器中首次打开时的显示内容类似:

图21.5 NDB群集自动安装程序的欢迎屏幕

The welcome screen includes two options: "Create New NDB Cluster", and "Continue Previous Cluster Configuration".

您可以通过选择“ 新建NDB群集” 或“ 继续以前的群集配置 ”选项来访问安装程序用户界面Auto-Installer中的典型屏幕包含以下元素:

  1. 显示屏。  显示关于配置设置和用于更改它们的控件的数据的中心区域。

  2. 面包屑导航。  位于GUI的左上角和顶部中心的面包屑导航栏包含一系列标题,链接到与NDB群集配置中的步骤相对应的屏幕。面包屑允许您按照任意顺序在这些阶段之间跳转。

  3. 顺序导航。  它由一组标记为PreviousNextFinished的按钮组成 ,可以在GUI的右下角找到。顺序导航用于在建议顺序的步骤之间移动。

  4. 设置和帮助菜单。  这些菜单可以在GUI的右上角找到(在面包屑导航栏的右侧)。 设置提供了一种方式检查并可能更改自动安装程序的配置设置; 可以使用帮助来访问安装程序的内置帮助文件。

刚描述的元素的位置在Auto-Installer中的典型页面中显示; 叠加在其上的数字对应于前面列表中使用的数字。

图21.6 NDB集群自动安装程序GUI的布局

The "Breadcrumb navigation" horizontal menu is on top, the "Settings and Help menus" is also on top and to the right of the breadcrumb navigation, the "Sequential navigation" is located on the bottom right of the screen, and "Display panel" is in the central area. The example "Display panel" screen is titled "Cluster Type and SSH Credentials" and shows two areas. The "Cluster Property" area includes four configurable properties: "Cluster name" defined as "MyCluster", "Host IP" as "127.0.0.1", an "Application area" select box with "simple loading" selected, and a "Write load" selection box with "medium" selected. The "SSH property" area includes "Key based SSH" checked, and empty "User name" and "Password" fields.

本节的其余部分将详细介绍除显示面板以外的所有这些元素。 第21.2.1.3节“使用NDB群集自动安装程序”介绍了显示区域中显示的面板以及每个面板及其包含的控件的功能。

任意和顺序导航。  自动安装程序可以显示涵盖NDB群集部署的设置和配置不同阶段的任意页面。您可以通过两种方式在页面之间导航。其中第一个是面包屑导航工具栏,显示各种页面的标题(当前页面的标题被高亮显示和禁用)。从这些页面中,通过选择相应页面的标题,可以以任何希望的顺序访问任何所需的页面。此工具栏如下所示:

图21.7 NDB群集自动安装程序的详细信息面包屑导航,显示页面标题/链接

Breadcrumb titles are: Define Cluster, that is currently selected, and Define hosts, Define processes, Define parameters, and Deploy configuration.

Auto-Installer提供的第二种导航机制由页面右下角NextPreviousFinish顺序导航按钮组成。可以使用这些按预定顺序移动到下一页或上一页,或者转到最后一页。按钮是根据需要启用和禁用的,例如,您不能超越最后一页。

设置和帮助菜单。  这些菜单在GUI的右上角彼此相邻,如本节前面所示。设置菜单显示在这里的详细信息:

图21.8 NDB群集自动安装程序设置菜单详细信息

Content is described in the surrounding text.

下面列出设置菜单中的条目

  • 清除配置并重新启动:删除所有主机和进程; 将所有参数值重置为其默认值; 在第一页启动安装程序。

  • 自动将配置保存为Cookie:将配置信息(如主机名,流程数据和参数值)作为Cookie保存在浏览器中。当选择此选项时,将保存除SSH密码以外的所有信息。这意味着您可以退出并重新启动浏览器,并继续使用上次会话结束时停止的相同配置)。

    由于SSH密码永远不会被保存,所以如果使用的话,您必须在新会话开始时再次提供此密码。

  • 显示高级配置选项:在Auto-Installer中显示高级配置参数,并由用户进行设置。

    设置完成后,高级参数将继续在配置文件中使用,直到它们被明确更改或重置为止。这与高级参数当前是否在安装程序中可见无关; 换句话说,禁用菜单项不会重置任何这些参数的值。

  • 自动获取新主机的资源信息:自动查询新主机的硬件资源信息,以预先填充许多配置选项和值。在这种情况下,建议的值不是必需的,但是它们的使用除非在安装程序中使用适当的编辑选项进行了明确更改。

与安装程序的导航元素一样,由于您之前做出了选择,“ 设置”菜单中的一项或多项条目可能会被禁用。

此处显示帮助”菜单,因为它在展开时显示:

图21.9 NDB群集自动安装帮助菜单,展开

Content is described in the surrounding text.

帮助菜单中提供了几个选项,在下面的列表中所述:

  • 内容:显示内置的用户指南。这是在单独的浏览器窗口中打开的,因此可以在不中断工作流程的情况下与安装程序同时使用。

  • 当前页面:打开描述当前显示在安装程序中的页面的内置用户指南。

  • 关于:这将显示一个小对话框,显示安装程序名称和它提供的NDB Cluster分发版本的版本号,类似于此处显示的内容:

    图21.10 NDB群集自动安装程序关于对话框

    Text shown in this example: Oracle MySQL Cluster Installer: Version: mysql-5.6-cluster-7.3

Auto-Installer还为大多数输入窗口小部件提供了工具提示形式的上下文相关帮助。当鼠标悬停在小部件上或者有时会出现在小部件标签旁边的小问号上时,会显示其中一个工具提示。

此外,NDB群集配置参数的名称与在线NDB群集文档中的说明相关联,因此,如果您单击给定参数的名称,则该参数的文档将显示在单独的窗口中。

21.2.1.3使用NDB集群自动安装程序

NDB群集自动安装程序由多个页面组成,每个页面对应于用于配置和部署NDB群集的过程中的一个步骤,并在此处列出:

  • 欢迎使用:通过选择配置新NDB群集或继续配置现有NDB群集,开始使用自动安装程序。

  • 定义群集:设置整个群集的基本信息,例如名称,主机和负载类型。在这里,您还可以设置用于访问远程主机的SSH身份验证类型(如果需要)。

  • 定义主机:确定您打算运行NDB群集进程的主机。

  • 定义进程:将给定类型的一个或多个进程分配给每个集群主机。

  • 定义属性:为流程或流程类型设置配置属性。

  • 部署集群:使用之前设置的配置部署集群; 启动和停止部署的群集。

以下各节以刚刚列出的顺序更详细地描述了每个页面的用途和功能。

启动NDB群集自动安装程序

自动安装程序与NDB Cluster软件一起提供。(请参见第21.2节“NDB群集安装”。)本节介绍如何启动安装程序。你可以通过调用ndb_setup.py 可执行文件来完成。

重要

您应该以普通用户身份运行ndb_setup.py ; 没有特殊的特权需要这样做。你应该运行该程序的 mysql用户,或使用系统 root或管理员帐户; 这样做可能会导致安装失败。

bin在NDB集群安装目录中找到 ndb_setup.py ; 典型的位置可能 /usr/local/mysql/bin位于Linux系统或 C:\Program Files\MySQL\MySQL Server 5.6\binWindows系统上,但这可能会因您的系统上安装NDB Cluster软件的位置而异。

在Windows上,您还可以通过在NDB集群安装目录中运行setup.bat启动安装程序 从命令行调用时,它会接受与ndb_setup.py相同的选项

ndb_setup.py可以使用影响其操作的几个选项中的任何一个来启动,但通常允许使用默认设置就足够了,在这种情况下,您可以通过以下两种方法之一启动 ndb_setup.py

  1. 导航到bin 终端中的NDB Cluster 目录,并从命令行调用它,而不需要任何其他参数或选项,如下所示:

    外壳> ndb_setup
    

    无论操作平台如何,这都是可行

  2. bin 在文件浏览器(例如Windows上的Windows资源管理器,或Linux上的Konqueror,Dolphin或Nautilus)中 导航到NDB群集目录,然后激活(通常通过双击) ndb_setup.py文件图标。这适用于Windows,并且应该可以与大多数常见Linux桌面一起使用。

    在Windows上,您还可以导航到NDB群集安装目录并激活 setup.bat文件图标。

在任何一种情况下,一旦ndb_setup.py被调用,自动安装程序的 欢迎 屏幕应该在系统的默认Web浏览器中打开。

在某些情况下,您可能希望为安装程序使用非默认设置,例如为自动安装程序包含的Web服务器指定不同的端口以便运行,在这种情况下,您必须调用带有一个或多个启动选项的ndb_setup.py值覆盖必要的默认值。使用setup.bat可以在Windows系统上使用相同的启动选项 在NDB Cluster软件分发中为这些平台提供的文件。这可以使用命令行完成,但是如果您想要或需要从桌面或文件浏览器启动安装程序,同时使用这些选项中的一个或多个选项,还可以创建包含正确调用的脚本或批处理文件,然后在文件浏览器中双击其文件图标以启动安装程序。(在Linux系统上,您可能还需要先使脚本文件可执行。)有关NDB群集自动安装程序的高级启动选项的信息,请参见 第21.4.27节“ ndb_setup.py - 启动基于浏览器的自动安装程序为NDB集群“

NDB集群自动安装程序欢迎屏幕

调用ndb_setup.py欢迎屏幕将在默认浏览器中加载,如下所示:

图21.11 NDB群集自动安装欢迎屏幕(特写)

Content is described in the surrounding text.

该屏幕为进入安装程序提供以下两种选择,其中之一必须选择继续:

  1. 创建新的NDB群集:启动自动安装程序,并设置和部署一个全新的群集。

  2. 继续以前的群集配置:在前一个会话结束的同一位置启动自动安装程序,并保留以前的所有设置。

第二个选项要求浏览器能够从前一个会话访问它的cookie,因为它们提供了存储会话期间生成的配置和其他信息的机制。换句话说,要继续使用自动安装程序的上一个会话,您必须使用与前一个会话相同的网络浏览器运行在同一主机上。

NDB群集自动安装程序定义群集屏幕

定义簇”屏幕是在“ 欢迎” 屏幕中进行选择后显示的第一个屏幕, 用于设置群集的常规属性。Define Cluster屏幕的布局如下所示:

图21.12 NDB群集自动安装程序定义群集屏幕

Content is described in the surrounding text.

Define Cluster”屏幕允许您为该群集设置许多常规属性,如以下列表中所述:

  • 群集名称:标识群集的名称默认是MyCluster

  • 主机列表:包含集群进程应运行的一个或多个主机的以逗号分隔的列表。默认情况下,这是127.0.0.1如果将远程主机添加到列表中,则必须能够使用 提供SSH凭证连接到它们

  • 应用程序类型:选择以下选项之一:

    1. 简单的测试:小规模测试的资源使用率最低。这是默认值。不适用于生产环境

    2. Web:最大化给定硬件的性能。

    3. 实时:最大限度地提高性能,同时最大限度地提高对超时的敏感度,以便将检测失败群集进程所需的时间降至最低。

  • 写入负载:为整个群集的预期写入次数选择一个级别。您可以选择以下任何一个级别:

    1. :期望的负载包括少于100次写入事务。

    2. :预计负载包括每秒100到1000个写入事务。

    3. :预期负载包括每秒超过1000次写入事务。

  • SSH凭证:选择 基于密钥的SSH或输入 用户密码凭证。要连接到主机列表中指定的任何远程主机,需要使用SSH密钥或带有密码的用户名默认情况下,选择基于密钥的SSH,并且 用户密码文件为空。

NDB群集自动安装程序定义主机屏幕

此处显示的定义主机”屏幕提供了查看和指定每个群集主机的几个关键属性的方法:

图21.13 NDB群集定义主机屏幕

Content is described in the surrounding text.

当前输入的主机以各种信息显示在网格中。您可以通过单击添加主机按钮并输入一个或多个以逗号分隔的主机名,IP地址或两者的列表添加主机(就像在“ 定义集群”屏幕上编辑主机列表时一样 )。

同样,您可以使用标记为Remove Selected host(s)的按钮删除一个或多个主机以这种方式删除主机时,为该主机配置的任何进程也会被删除。

如果在“ 设置” 菜单中选中了 自动获取新主机的资源信息,则自动安装程序会尝试检索平台名称,内存容量和CPU内核数量,并自动填充这些内容。其状态显示在资源信息栏中。从远程主机获取信息不是即时的,可能需要一些时间,特别是从运行Windows的远程主机。

如果Define Cluster屏幕上的SSH用户凭证 发生更改,该工具会尝试从缺少信息的任何主机刷新硬件信息。但是,如果给定字段已被编辑,则用户提供的信息 不会被从该主机获取的任何值覆盖。

硬件资源信息,平台名称,安装目录和数据目录可由用户通过单击网格中相应的单元格进行编辑,方法是选择一个或多个主机并单击标记为编辑选定主机的按钮这会导致出现一个对话框,其中可以编辑这些字段,如下所示:

图21.14 NDB群集自动安装程序编辑主机对话框

Content is described in the surrounding text.

当选择多个主机时,任何编辑的值将应用于所有选定的主机。

NDB群集自动安装程序定义进程屏幕

此处显示定义进程屏幕提供了一种将NDB群集进程(节点)分配给群集主机的方法:

图21.15 NDB群集自动安装程序定义进程对话框

Content is described in the surrounding text. The example process tree topology includes "Any host" and "127.0.0.1", as defined earlier. The 127.0.0.1 example includes the following processes: Management mode 1, API node 1, API node 2, API node 3, SQL node 1, SQL node 2, Multi threaded data node 1, and Multi threaded data node 2. The bottom of this pane includes "Add process" and "Delete process" buttons.

此屏幕的左侧部分包含一个进程树,显示了每台主机和进程的运行设置。右侧是一个面板,显示有关树中当前所选项目的信息。

首次访问给定群集的此屏幕时,会根据主机数量为您定义一组默认进程。如果稍后返回到“ 定义主机”屏幕,请删除所有主机并添加新主机,这也会导致定义一组新的默认进程。

NDB群集进程具有以下类型:

  • 管理节点。  执行管理任务,如停止单个数据节点,查询节点和群集状态以及进行备份。可执行文件: ndb_mgmd

  • 单线程数据节点。  存储数据并执行查询。可执行文件: ndbd

  • 多线程数据节点。  存储数据并使用并行执行的多个工作线程执行查询。可执行文件: ndbmtd

  • SQL节点。  用于执行SQL查询的MySQL服务器 NDB可执行文件: mysqld

  • API节点。  客户端NDB通过NDB API或其他低级客户端API 访问数据 ,而不是使用SQL。有关更多信息,请参阅MySQL NDB群集API开发人员指南

有关进程(节点)类型的更多信息,请参见 第21.1.1节“NDB集群核心概念”

在树中所示的处理是由类型顺序编号,对每台主机,例如,SQL node 1SQL node 2,等等-简化鉴别。

每个管理节点,数据节点或SQL进程必须分配给特定的主机,并且不允许在任何其他主机上运行。API节点可以分配给单个主机,但这不是必需的。相反, 除了任何其他主机之外,您还可以将其分配给特定的任何主机条目,该主机条目除了其他主机之外还包含该主机条目,并且它充当允许在任何主机上运行的进程的占位符。只有API进程可以使用这个任何主机条目

添加进程。  要向给定主机添加新进程,请右键单击该主机在树中的条目,然后在出现时选择 添加进程弹出窗口,或在进程树中选择主机,然后按进程树下的 添加进程按钮。执行这些操作中的任何一个都会打开添加进程对话框,如下所示:

图21.16 NDB群集自动安装程序添加进程对话框

Most content is described in the surrounding text. Shows a window titled "Add new process" with two options: "Select process type:" that shows a select box with "API node" selected, and "Enter process name:" with "API node 4" entered as plain text. Action buttons include "Cancel" and "Add".

在这里您可以从本节前面介绍的可用流程类型中进行选择; 如果需要,还可以输入任意进程名称来代替建议的值。

删除过程。  要删除进程,请右键单击树中的进程并从出现的弹出菜单中选择删除进程,或选择进程,然后使用进程树下删除进程按钮。

在流程树中选择流程时,有关该流程的信息将显示在树右侧的面板中,您可以在其中更改流程名称及其类型。重要说明:目前,您只能将单线程数据节点(ndbd)更改为多线程数据节点(ndbmtd),或反之; 不允许其他进程类型更改。如果您想在其他任何流程类型之间进行更改,则必须先删除原始流程,然后添加所需类型的新流程。

NDB群集自动安装程序定义属性屏幕

此屏幕的布局与“ 定义进程”屏幕的布局相似, 左侧有一个进程树。与该屏幕的树不同, Define Attributes进程树按进程或节点类型组织,单线程和多线程数据节点被认为是相同类型的用于此目的的组,标记为 管理层数据层SQL层API层此树右侧的面板显示有关当前所选项目的信息。定义属性 屏幕显示在这里:

图21.17 NDB群集自动安装程序定义属性屏幕

Content is described in the surrounding text.

标记为显示高级配置的复选框位于流程树下方。选中此框可使信息窗格中显示高级选项。无论这些选项是否可见,都会设置和使用这些选项。

您可以通过从树中选择该进程,或通过选择其中一个图层文件夹来为群集中相同类型的所有进程编辑单个进程的属性 为给定属性设置的每个流程值将覆盖该属性的任何每个组的设置,否则这些设置将应用于所讨论的流程。这里显示了一个这样的信息面板的示例(对于SQL过程):

图21.18使用SQL进程属性定义属性细节

Most content is described in the surrounding text. SQL Node 1 is selected and displays property fields for "NodeId", "HostName", "DataDir", "Port", and "Socket". The "DataDir", "Port", and "Socket" rows include a green plus sign button on the right indicating that they can be edited.

对于信息面板中显示的某些属性,右侧显示带有加号的按钮,这意味着可以覆盖此属性的值。+按钮激活属性的输入小部件,使您可以更改其值。当该值被覆盖时,该按钮变为显示X的按钮,如下所示:

图21.19定义属性细节,覆盖属性默认值

Most content is described in the surrounding text. Is like the previous image but with the green plus sign button was clicked and its entry can now be edited. The green plus sign was replaced with a red X.

单击属性旁边X按钮可撤销对其进行的任何更改; 它立即恢复到预定义的值。

所有配置属性都具有由安装程序计算的预定义值,这些预定义值基于诸如主机名,节点ID,节点类型等因素。在大多数情况下,这些值可能会保留原样。如果您不熟悉它,强烈建议您在更改任何属性值之前阅读适用的文档。为了方便查找此信息,信息面板中显示的每个属性名称都链接到在线NDB群集文档中的说明。

NDB群集自动安装程序部署群集屏幕

该屏幕允许您执行以下任务:

  • 查看要应用的进程启动命令和配置文件

  • 通过在所有群集主机上创建任何必需的文件和目录来分发配置文件 - 即 按照当前配置的方式部署群集

  • 启动和停止群集

部署集群屏幕如下所示:

图21.20 NDB群集自动安装程序部署群集配置屏幕

Content is described in the surrounding text.

Define Attributes(定义属性)屏幕一样,此屏幕在左侧具有按流程类型组织的流程树。每个进程旁边都有一个状态图标,其颜色表示进程的当前状态:如果正在运行,则为绿色; 黄色如果它正在启动或停止; 如果过程停止,则为红色。

在流程树的右侧有两个信息面板,上面板显示启动所选过程所需的启动命令或命令。(对于某些进程,可能需要多个命令,例如,如果需要初始化)。下面板显示给定进程的配置文件的内容(如果有的话); 目前,管理节点进程只是具有配置文件的进程类型。其他进程类型在启动进程时使用命令行参数进行配置,或者根据实时需要从管理节点获取配置信息。

三个按钮位于流程树的正下方。它们被标记为并执行以下列表中描述的功能:

  • 部署集群:验证配置是否有效。创建群集主机上所需的任何目录,并将配置文件分发到主机上。进度条显示部署进行的程度。

  • 启动集群:集群部署与部署集群一样,之后所有集群进程都按正确的顺序启动。

    开始这些过程可能需要一些时间。如果预计完成时间过长,安装程序将提供取消或继续启动过程的机会。进度条指示启动过程的当前状态,如下所示:

    图21.21具有节点启动过程状态的进度条

    Progress bar showing status of node startup process. The small window is titled "Starting cluster" with a progress bar at 40% in the "Starting Cluster processes" phase of the operation.

    与前面提到的进程树相邻的进程状态图标也会随着每个进程的状态而更新。

  • 停止集群:集群启动后,您可以使用它停止它。与启动群集一样,群集关闭不是即时的,可能需要一段时间才能完成。与集群启动期间显示的进度条类似,进度条显示集群关闭过程的近似当前状态,与进程树相邻的进程状态图标也一样。

Auto-Installer my.cnf集群中的每个mysqld进程生成一个包含适当选项文件

21.2.2在Linux上安装NDB集群

本节介绍Linux和其他类Unix操作系统上NDB Cluster的安装方法。虽然接下来的几节提到Linux操作系统,但其中的指令和程序应该很容易适用于其他支持Unix的平台。有关Windows系统特定的手动安装和设置说明,请参见 第21.2.3节“在Windows上安装NDB群集”

每个NDB群集主机必须安装正确的可执行程序。运行SQL节点的主机必须在其上安装MySQL服务器二进制文件(mysqld)。管理节点需要管理服务器守护进程(ndb_mgmd); 数据节点需要数据节点守护进程(ndbdndbmtd)。没有必要在管理节点主机和数据节点主机上安装MySQL服务器二进制文件。建议您还在管理服务器主机上安装管理客户端(ndb_mgm)。

在Linux上安装NDB集群可以使用Oracle的预编译二进制文件(作为.tar.gz压缩文件下载),RPM软件包(也可从Oracle获得)或源代码完成。以下部分将介绍所有这三种安装方法。

无论使用哪种方法,在安装NDB群集二进制文件以创建所有群集节点的配置文件之前,仍需要启动群集。请参见 第21.2.4节“NDB群集的初始配置”

21.2.2.1在Linux上安装NDB群集二进制版本

本节介绍从Oracle提供的预编译二进制文件中为每种类型的群集节点安装正确可执行文件所需的步骤。

要使用预编译的二进制文件设置群集,安装过程中每个群集主机的第一步是从NDB群集下载页面下载二进制归档文件 (对于最新的64位NDB 7.5版本,这是 mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz。)我们假定您已将此文件放在每台机器的 /var/tmp目录中。

如果您需要自定义二进制文件,请参见 第2.9.3节“使用开发源代码树安装MySQL”

注意

完成安装后,请不要启动任何二进制文件。我们将向您展示如何在节点配置后执行此操作(请参见 第21.2.4节“NDB群集的初始配置”)。

SQL节点。  在指定用于托管SQL节点的每台计算机上,以系统root 用户身份执行以下步骤

  1. 检查您的/etc/passwd/etc/group文件(或使用您的操作系统提供的任何工具来管理用户和组),以查看系统上是否已有 mysql组和mysql 用户。一些操作系统发行版将这些作为操作系统安装过程的一部分。如果它们不存在,请创建一个新的 mysql用户组,然后将mysql用户添加 到该组中:

    shell> groupadd mysql
    shell>useradd -g mysql -s /bin/false mysql
    

    useraddgroupadd 的语法在不同版本的Unix上可能略有不同,或者它们可能具有不同的名称,如 adduseraddgroup

  2. 将位置更改为包含下载文件的目录,解压缩存档,然后创建一个指向mysqlmysql 目录的符号链接

    注意

    实际的文件和目录名称因NDB群集版本号而异。

    shell> cd /var/tmp
    shell> tar -C /usr/local -xzvf mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz
    shell>ln -s /usr/local/mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64 /usr/local/mysql
    
  3. 将位置更改为mysql目录并使用mysqld 设置系统数据库 --initialize,如下所示:

    shell> cd mysql
    shell>mysqld --initialize
    

    这会为MySQL root帐户生成一个随机密码 如果您 希望生成随机密码,则可以将该--initialize-insecure选项替换 --initialize无论哪种情况,在执行此步骤之前,您应该查看 第2.10.1.1节“使用mysqld手动初始化数据目录”以获取更多信息。另请参见 第4.4.4节“ mysql_secure_installation - 提高MySQL安装安全性”

    或者,您可以将位置更改为 mysql目录并运行 mysql_install_db以创建系统数据库:

    shell> cd mysql
    shell>scripts/mysql_install_db --user=mysql
    

    但是,不建议使用这种方法,因为mysql_install_db已被弃用,因此可能会在将来的版本中删除。

  4. 为MySQL服务器和数据目录设置必要的权限:

    shell> chown -R root .
    shell> chown -R mysql data
    shell>chgrp -R mysql .
    
  5. 将MySQL启动脚本复制到相应的目录,使其可执行,并将其设置为在操作系统启动时启动:

    shell> cp support-files/mysql.server /etc/rc.d/init.d/
    shell> chmod +x /etc/rc.d/init.d/mysql.server
    shell>chkconfig --add mysql.server
    

    (根据您的操作系统和版本,启动脚本目录可能会有所不同 - 例如,在某些Linux发行版中,它是 /etc/init.d。)

    这里我们使用Red Hat的chkconfig来创建启动脚本的链接; 在您的平台上使用适合此目的的任何方法,例如 Debian上的update-rc.d

请记住,必须在SQL节点所在的每台机器上重复执行上述步骤。

数据节点。  数据节点的安装不需要 mysqld二进制文件。只需要NDB集群数据节点可执行文件ndbd(单线程)或 ndbmtd(多线程)。这些二进制文件也可以在.tar.gz 存档中找到再一次,我们假设你已经放置了这个档案 /var/tmp

作为系统root(也就是说,在使用 sudosu root或系统的等效方式暂时承担系统管理员帐户的权限后),请执行以下步骤在数据节点主机上安装数据节点二进制文件:

  1. 将位置更改为/var/tmp 目录,然后将ndbdndbmtd二进制文件从存档中提取到合适的目录中,例如 /usr/local/bin

    shell> cd /var/tmp
    shell> tar -zxvf mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz
    shell> cd mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64
    shell> cp bin/ndbd /usr/local/bin/ndbd
    shell>cp bin/ndbmtd /usr/local/bin/ndbmtd
    

    (你可以安全地删除通过解压缩下载的存档创建的目录,它包含的文件,从 /var/tmp一次 ndb_mgmndb_mgmd 已经被复制到可执行文件目录。)

  2. 将位置更改为复制文件的目录,然后将它们都设为可执行的:

    shell> cd /usr/local/bin
    shell>chmod +x ndb*
    

前面的步骤应该在每个数据节点主机上重复。

虽然只有一个数据节点可执行文件需要运行NDB群集数据节点,但我们已经向您展示了如何在前面的说明中安装ndbdndbmtd我们建议您在安装或升级NDB群集时执行此操作,即使您打算只使用其中的一个,因为如果您稍后决定从一个更改为另一个,这样可以节省时间和麻烦。

注意

托管数据节点的每台计算机上的数据目录为 /usr/local/mysql/data这些信息在配置管理节点时非常重要。(请参见第21.2.4节“NDB群集的初始配置”。)

管理节点。  管理节点的安装不需要 mysqld二进制文件。只需要NDB集群管理服务器(ndb_mgmd); 您最有可能还想安装管理客户端(ndb_mgm)。这两个二进制文件也可以在.tar.gz存档中找到再一次,我们假设你已经放置了这个档案 /var/tmp

作为系统root,请执行以下步骤在管理节点主机上安装ndb_mgmdndb_mgm

  1. 将位置更改为/var/tmp 目录,然后将ndb_mgmndb_mgmd从存档中提取到合适的目录中,例如/usr/local/bin

    shell> cd /var/tmp
    shell> tar -zxvf mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz
    shell> cd mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64
    shell>cp bin/ndb_mgm* /usr/local/bin
    

    (你可以安全地删除通过解压缩下载的存档创建的目录,它包含的文件,从 /var/tmp一次 ndb_mgmndb_mgmd 已经被复制到可执行文件目录。)

  2. 将位置更改为复制文件的目录,然后将它们都设为可执行的:

    shell> cd /usr/local/bin
    shell>chmod +x ndb_mgm*
    

第21.2.4节“NDB群集的初始配置”中,我们为我们的示例NDB群集中的所有节点创建了配置文件。

21.2.2.2从RPM安装NDB群集

本节介绍使用Oracle提供的以NDB 7.5.4开头的RPM软件包为每种类型NDB集群节点安装正确可执行文件所需的步骤。有关以前版本NDB群集的RPM的信息,请参阅 使用旧式RPM(NDB 7.5.3及更早版本)进行安装

作为本节所述方法的替代方案,Oracle为NDB Cluster 7.5.6及更高版本提供了与许多常见Linux发行版兼容的MySQL Repositories。此处列出的两个存储库可用于基于RPM的分发:

RPM可用于32位和64位Linux平台。这些RPM的文件名使用以下模式:

MySQL的集群社区数据节点,7.5.8-1.el7.x86_64.rpm
mysql-cluster- license- component- ver- revdistroarch的.rpm
  
    license:= {商业| 社区}
    
    component:{管理服务器| 数据节点| 服务器| 客户端| other—see text}
    
    vermajorminorrelease
    
    revmajor[。minor]
    
    distro:{el6 | el7 | sles12}
    
    arch:{i686 | x86_64的}

license表明RPM是否是NDB集群的商业或社区版本的一部分。在本节的其余部分中,我们假设您正在安装社区版本的示例。

component下表中可以找到描述的 可能值

表21.5 NDB Cluster RPM分布的组件

零件 描述
auto-installer NDB集群自动安装程序; 请参见 第21.2.1节“NDB集群自动安装程序”以了解使用方法
client MySQL和NDB客户端程序; 包括 mysql客户端, ndb_mgm客户端和其他客户端工具
common MySQL服务器需要的字符集和错误消息信息
data-node ndbd ndbmtd数据节点二进制文件
devel MySQL客户端开发所需的头文件和库文件
embedded 嵌入式MySQL服务器
embedded-compat 向后兼容的嵌入式MySQL服务器
embedded-devel 用于开发嵌入式MySQL应用程序的头文件和库文件
java 支持ClusterJ应用程序所需的JAR文件
libs MySQL客户端库
libs-compat 向后兼容的MySQL客户端库
management-server NDB群集管理服务器(ndb_mgmd
memcached 需要支持的文件 ndbmemcache
ndbclient NDB用于运行NDB API和MGM API应用程序的客户端库(libndbclient
ndbclient-devel 开发NDB API和MGM API应用程序所需的头文件和其他文件
nodejs 为NDB集群设置Node.JS支持所需的文件
server 包含 存储引擎支持的MySQL服务器(mysqldNDB以及相关的MySQL服务器程序
test mysqltest,其他MySQL测试程序和支持文件


.tar针对给定平台和体系结构的所有NDB Cluster RPM 的单个包(文件)也可用。这个文件的名称如下所示:

mysql-cluster- license- ver- revdistroarch的.rpm,bundle.tar

您可以使用tar或您首选的工具来提取个别RPM文件从这个文件 提取档案。

下表列出了安装三种主要类型的NDB群集节点所需的组件:

  • 管理节点management-server

  • 数据节点data-node

  • SQL节点servercommon

另外,client应安装RPM以在至少一个管理节点上提供ndb_mgm管理客户端。您也可能希望将其安装在SQL节点上,以使MySQL和其他MySQL客户端程序可用。我们将在本节后面讨论按类型安装节点。

ver代表NDB7.5中的三部分 存储引擎版本号。x格式,如7.5.11示例中所示 rev在中提供RPM修订号 majorminor 格式。在本节中显示的示例中,我们使用 1.1此值。

distro(Linux发行)是一个rhel5(甲骨文Linux 5时,红帽企业Linux 4和5), el6甲骨文Linux 6中,红帽企业Linux 6), el7甲骨文的Linux 7,红帽企业Linux 7),或 sles12(SUSE企业Linux 12)。对于本节中的示例,我们假定主机运行Oracle Linux 7,Red Hat Enterprise Linux 7或同等版本(el7)。

arch适用i686于32位RPM和x86_6464位版本。在这里显示的例子中,我们假设一个64位平台。

RPM文件名中的NDB群集版本号(如此处所示7.5.11)可能因您实际使用的版本而异。 所有要安装的Cluster RPM都具有相同的版本号非常重要该体系结构也应该适用于要安装RPM的机器; 尤其是,您应该记住,64位RPM(x86_64)不能用于32位操作系统(i686用于后者)。

数据节点。  在承载NDB群集数据节点的计算机上,只需安装data-node RPM。为此,请将此RPM复制到数据节点主机,并以系统root用户身份运行以下命令,根据需要替换为RPM显示的名称,以匹配从MySQL网站下载的RPM的名称:

外壳> rpm -Uhv mysql-cluster-community-data-node-7.5.11-1.el7.x86_64.rpm

这将在其中安装ndbdndbmtd数据节点二进制文件 /usr/sbin其中任何一个都可以用来在该主机上运行数据节点进程。

SQL节点。 RPM servercommonRPM 复制到每台要用于托管NDB集群SQL节点(server 需要common)的计算机。server通过以系统root用户身份执行以下命令来安装 RPM,根据需要替换为RPM显示的名称,以匹配从MySQL网站下载的RPM的名称:

外壳> rpm -Uhv mysql-cluster-community-server-7.5.11-1.el7.x86_64.rpm

这会目录中安装具有存储引擎支持的MySQL服务器二进制文件(mysqld它还安装了所有需要的MySQL服务器支持文件和有用的MySQL服务器程序,包括 mysql.servermysqld_safe启动脚本( 分别为)。RPM安装程序应自动处理常规配置问题(如需要时创建用户和组)。 NDB/usr/sbin/usr/share/mysql/usr/binmysql

重要

您必须使用为NDB群集发布的这些RPM的版本; 那些为标准MySQL服务器发布的版本不提供对NDB存储引擎的支持

要管理SQL节点(MySQL服务器),您还应该安装clientRPM,如下所示:

外壳> rpm -Uhv mysql-cluster-community-client-7.5.11-1.el7.x86_64.rpm

这会将mysql客户端和其他MySQL客户端程序(如mysqladminmysqldump)安装到/usr/bin

管理节点。  要安装NDB集群管理服务器,只需要使用management-serverRPM。将此RPM复制到用于承载管理节点的计算机上,然后以系统根用户身份运行以下命令(根据需要替换为RPM显示的名称以匹配management-server从MySQL网站下载的RPM的名称)来安装它

外壳> rpm -Uhv mysql-cluster-commercial-management-server-7.5.11-1.el7.x86_64.rpm

此RPM将管理服务器二进制文件ndb_mgmd安装 /usr/sbin目录中。虽然这是运行管理节点实际需要的唯一程序,但也可以使用ndb_mgm NDB集群管理客户端,这也是一个好主意您可以通过安装前面描述RPM 来获得此程序以及其他NDB客户端程序,如ndb_descndb_configclient

注意

以前,ndb_mgm是通过用于安装管理服务器的相同RPM安装的。在NDB 7.5.4和更高版本中,所有NDB客户端程序都是从client安装mysql和其他MySQL客户端的相同RPM 获得的

有关使用Oracle提供的RPM安装MySQL的一般信息请参见第2.5.5节“使用Oracle的RPM软件包在Linux上安装MySQL”

从RPM安装后,仍然需要配置群集; 有关信息,请参见 第21.2.4节“NDB群集的初始配置”

使用旧式RPM(NDB 7.5.3及更早版本)进行安装。  本节其余部分的信息仅适用于NDB 7.5.3及更早版本,并提供了使用 Oracle提供的旧式 RPM包为NDB之前的每种类型的NDB群集节点安装正确可执行文件所需的步骤7.5.4。这些旧式 RPM 的文件名使用以下模式:

MySQL-Cluster- component- producttype- ndbversion- revisiondistributionarchitecture的.rpm

component:= {server | 客户端[| other]}

producttype:= {gpl | 高级}

ndbversion:= majorminorrelease

distribution:= {sles11 | rhel5 | EL6}

architecture:= {i386 | x86_64的}

componentserverclient(其他值也是可能的,但是因为只有 serverclient 组件需要才能进行NDB群集安装,因此我们在此不讨论它们。)producttypehttp://dev.mysql.com/downloads/cluster/下载for Community RPM 是始终gpl; advanced用于表示商业版本。 ndbversion代表NDB7.5中的三部分 存储引擎版本号。x格式; 我们 7.5.3在本节的其余部分使用。RPM revision如下1所示 distribution可以是 sles12(SUSE Enterprise Linux 12), rhel6(Oracle Linux 6,Red Hat Enterprise Linux 6)或el7(Oracle Linux 7,Red Hat Enterprise Linux 7)之一。architecturei38632位的RPM和 x86_64为64位版本。

对于NDB群集,需要一个并且可能需要两个RPM:

  • serverRPM(例如, MySQL-Cluster-server-gpl-7.5.3-1.sles11.i386.rpm),其提供给运行具有MySQL服务器所需的核心文件NDBCLUSTER存储引擎支持(即,作为一个NDB簇SQL节点)以及所有NDB簇可执行程序,包括管理节点,数据节点,和ndb_mgm客户端二进制文件。安装NDB群集始终需要此RPM。

  • 如果您没有自己的客户端应用程序能够管理MySQL服务器,则还应该获取并安装提供mysql客户端 clientRPM(例如 MySQL-Cluster-client-gpl-7.5.3-1.sles11.i386.rpm

所有要安装的Cluster RPM都具有相同的版本号非常重要architecture名称也应该适用于要安装RPM的机器; 尤其是,您应该记住,64位RPM不能用于32位操作系统。

数据节点。  在承载群集数据节点的计算机上,只需安装serverRPM。为此,请将此RPM复制到数据节点主机,并以系统root用户身份运行以下命令,根据需要替换为RPM显示的名称,以匹配从MySQL网站下载的RPM的名称:

外壳> rpm -Uhv MySQL-Cluster-server-gpl-7.5.11-1.sles11.i386.rpm

虽然这会安装所有NDB群集二进制文件,但实际只需要运行NDB群集数据节点的程序ndbdndbmtd (都是in /usr/sbin)。

SQL节点。  在用于托管集群SQL节点的每台计算机上,server通过以系统root用户身份执行以下命令来安装RPM,并根据需要替换为RPM显示的名称,以匹配从MySQL网站下载的RPM的名称:

外壳> rpm -Uhv MySQL-Cluster-server-gpl-7.5.11-1.sles11.i386.rpm

这将目录中安装具有存储引擎支持 的MySQL服务器二进制文件(mysqld,以及所有需要的MySQL服务器支持文件。它还安装了 mysql.servermysqld_safe启动脚本(分别)。RPM安装程序应自动处理常规配置问题(如需要时创建用户和组)。 NDB/usr/sbin/usr/share/mysql/usr/binmysql

要管理SQL节点(MySQL服务器),您还应该安装clientRPM,如下所示:

外壳> rpm -Uhv MySQL-Cluster-client-gpl-7.5.11-1.sles11.i386.rpm

这将安装mysql客户端程序。

管理节点。  要安装NDB集群管理服务器,只需要使用serverRPM。将此RPM复制到用于承载管理节点的计算机上,然后以系统根用户身份运行以下命令(根据需要替换为RPM显示的名称以匹配server从MySQL网站下载的RPM的名称)来安装它

外壳> rpm -Uhv MySQL-Cluster-server-gpl-7.3.22-1.sles11.i386.rpm

尽管此RPM安装了许多其他文件,但运行管理节点实际只需要管理服务器二进制ndb_mgmd(在 /usr/sbin目录中)。serverRPM还安装ndb_mgm,在 NDB管理客户端。

有关使用Oracle提供的RPM安装MySQL的一般信息请参见第2.5.5节“使用Oracle的RPM软件包在Linux上安装MySQL”有关所需的安装后配置的信息请参见 第21.2.4节“NDB群集的初始配置”

21.2.2.3使用.deb文件安装NDB群集

本节提供有关在Debian和相关Linux发行版(如Ubuntu)上使用.debOracle为此提供文件安装NDB Cluster的信息

对于NDB Cluster 7.5.6和更高版本,Oracle还为Debian和其他发行版提供了APT存储库。有关说明和附加信息,请参阅 使用APT存储库安装MySQL NDB群集

Oracle .deb为32位和64位平台的NDB Cluster 7.5 提供安装程序文件。对于基于Debian的系统,只需要一个安装程序文件。根据适用的NDB集群版本,Debian版本和体系结构,此文件使用此处显示的模式命名:

mysql-cluster-gpl- ndbver-debian debianver- arch.deb

在这里,ndbver为第3部分组成的 NDB发动机的版本号, debianver则Debian的(的主版本89),并且 arch是一个 i686x86_64在下面的例子中,我们假设您希望在64位Debian 9系统上安装NDB 7.5.11; 在这种情况下,安装程序文件被命名 mysql-cluster-gpl-7.5.11-debian9-x86_64.deb-bundle.tar

一旦你下载了相应的 .deb文件,你可以解压它,然后使用命令行安装它dpkg,如下所示:

外壳> dpkg -i mysql-cluster-gpl-7.5.11-debian9-i686.deb

您也可以使用dpkg如下所示将其删除

外壳> dpkg -r mysql

安装程序文件还应与大多数使用.deb文件的图形软件包管理器(例如GDebiGnome桌面)兼容

.deb文件将安装NDB集群 ,其中是包含的MySQL服务器的两部分版本系列版本。对于NDB 7.5,这总是目录布局与通用Linux二进制发行版相同(请参阅 表2.3,“通用Unix / Linux二进制包的MySQL安装布局”),除了找到启动脚本和配置文件而不是 所有NDB集群可执行文件(如 ndb_mgmndbdndb_mgmd)都放置在该 目录中。 /opt/mysql/server-version/version5.7support-filessharebin

21.2.2.4在Linux上从Source构建NDB集群

本节提供有关在Linux和其他类Unix平台上编译NDB集群的信息。从源代码构建NDB集群与构建标准的MySQL服务器类似,虽然它在这里讨论的几个关键方面有所不同。有关从源代码构建MySQL的一般信息,请参见 第2.9节“从源代码安装MySQL”有关在Windows平台上编译NDB集群的信息,请参见 第21.2.3.2节“在Windows上从源编译和安装NDB集群”

构建NDB群集需要使用NDB群集源。可以从http://dev.mysql.com/downloads/cluster/上的NDB群集下载页面 获得这些信息存档的源文件应该有一个类似于的名称 mysql-cluster-gpl-7.5.11.tar.gz您还可以从launchpad.net获得MySQL开发资源 不支持从标准MySQL服务器5.7源构建NDB群集

CMakeWITH_NDBCLUSTER_STORAGE_ENGINE 选项会导致建立管理节点,数据节点和其他NDB集群程序的二进制文件; 它还会导致mysqld存储引擎支持下编译构建NDB群集时需要此选项(或其别名 )。 NDBWITH_NDBCLUSTER

重要

WITH_NDB_JAVA选项默认启用。这意味着,默认情况下,如果 CMake在您的系统上找不到Java的位置,配置过程将失败; 如果您不希望启用Java和ClusterJ支持,则必须通过使用配置构建明确指出 -DWITH_NDB_JAVA=OFF用于 WITH_CLASSPATH根据需要提供Java类路径。

有关特定于构建NDB群集的CMake选项的更多信息,请参阅 编译NDB群集的选项

运行make && make install(或系统的等价物)后,结果与将预编译的二进制文件解压缩到相同位置所获得的结果类似。

管理节点。  从源代码构建并运行默认 make install时可以在中找到管理服务器和管理客户端二进制文件(ndb_mgmdndb_mgm/usr/local/mysql/binndb_mgmd需要是存在的管理节点主机上; 然而,在同一台主机上安装ndb_mgm也是一个好主意 这些可执行文件都不需要主机文件系统上的特定位置。

数据节点。  数据节点主机上唯一需要的可执行文件是数据节点binary ndbdndbmtd例如,mysqld不必在主机上。)默认情况下,从源代码构建时,该文件被放置在目录中/usr/local/mysql/bin要在多个数据节点主机上安装,只能使用 ndbdndbmtd需要复制到其他主机或机器。(假定所有数据节点主机都使用相同的体系结构和操作系统;否则,您可能需要为每个不同的平台单独编译)。数据节点二进制文件不需要位于主机文件系统的任何特定位置,只要位置是已知的。

从源代码编译NDB集群时,不需要特殊选项来构建多线程数据节点二进制文件。配置NDB 存储引擎支持的构建会导致ndbmtd自动生成; make installndbmtd二进制bin文件与mysqldndbdndb_mgm一起放置在安装 目录中

SQL节点。  如果您编译支持集群的MySQL并执行默认安装(使用make install作为系统root用户), 则将mysqld放入 /usr/local/mysql/bin按照第2.9节“从源代码安装MySQL”中给出的步骤使 mysqld准备好使用。如果您想运行多个SQL节点,则可以在多台机器上使用同一个mysqld可执行文件及其相关支持文件的副本 最简单的方法是复制整个文件/usr/local/mysql 目录及其中包含的所有目录和文件复制到其他SQL节点主机或主机,然后重复每台机器上第2.9节“从源代码安装MySQL”中的步骤 如果使用非默认PREFIX 选项配置构建版本,则必须相应地调整目录。

第21.2.4节“NDB群集的初始配置”中,我们为我们的示例NDB群集中的所有节点创建了配置文件。

21.2.3在Windows上安装NDB群集

本节介绍Windows主机上的NDB群集的安装过程。Windows的NDB Cluster 7.5二进制文件可以从http://dev.mysql.com/downloads/cluster/获得有关从Oracle提供的二进制版本在Windows上安装NDB群集的信息,请参见 第21.2.3.1节“在Windows上从二进制版本安装NDB群集”

也可以使用Microsoft Visual Studio在Windows上从源代码编译和安装NDB集群。有关更多信息,请参见第21.2.3.2节“从Windows上的Source编译和安装NDB集群”

21.2.3.1从二进制发行版在Windows上安装NDB集群

本节介绍了使用本节开头概述的相同的4节点安装程序,使用Oracle提供的二进制无安装 NDB集群版本在Windows上进行NDB集群的基本安装(请参见 第21.2节“NDB集群安装”),如下表所示:

表21.6示例群集中节点的网络地址

节点 IP地址
管理节点(mgmd 198.51.100.10
SQL节点(mysqld 198.51.100.20
数据节点“A”(ndbd 198.51.100.30
数据节点“B”(ndbd 198.51.100.40

与其他平台上一样,运行SQL节点的NDB集群主机必须在其上安装MySQL服务器二进制文件(mysqld.exe)。你也应该在这台主机上安装MySQL客户端(mysql.exe)。对于管理节点和数据节点,不需要安装MySQL服务器二进制文件; 但是,每个管理节点都需要管理服务器守护进程(ndb_mgmd.exe); 每个数据节点都需要数据节点守护进程(ndbd.exendbmtd.exe)。在本例中,我们将ndbd.exe作为数据节点可执行文件,但是您可以安装 ndbmtd.exe,这个程序的多线程版本,而是以完全相同的方式。您还应该在管理服务器主机上安装管理客户端(ndb_mgm.exe)。本节介绍为每种类型的NDB群集节点安装正确的Windows二进制文件所需的步骤。

注意

与其他Windows程序一样,NDB集群可执行文件以.exe文件扩展名命名但是,.exe从命令行调用这些程序时,不需要包含 扩展名。因此,我们经常在本文档中将这些程序简单地称为 mysqldmysqlndb_mgmd等。您应该明白,无论我们是指(例如) mysqld还是mysqld.exe,任何名称都意味着同样的事情(MySQL服务器程序)。

要使用Oracles的no-install二进制文件设置NDB群集 ,安装过程的第一步是从http://dev.mysql.com/downloads/cluster/下载最新的NDB群集Windows ZIP二进制归档文件 该归档文件具有的文件名 ,其中,存储引擎的版本(如 ),和 是体系结构(对于32位二进制文件,并 为64位二进制文件)。例如,用于64位Windows系统的NDB Cluster 7.5.11归档文件被命名 mysql-cluster-gpl-ver-winarch.zipverNDB7.5.11arch3264mysql-cluster-gpl-7.5.11-win64.zip

您可以在32位和64位版本的Windows上运行32位NDB群集二进制文件; 但是,64位NDB集群二进制文件只能在64位版本的Windows上使用。如果您在具有64位CPU的计算机上使用32位版本的Windows,则必须使用32位NDB群集二进制文件。

为了最大限度地减少需要从互联网上下载或在计算机之间复制的文件数量,我们从打算运行SQL节点的计算机开始。

SQL节点。  我们假设您已将归档副本放置在IP地址为198.51.100.20的计算机上的目录中,其中 是当前用户的名称。(您可以使用命令行获取该名称。)要将NDB Cluster可执行文件作为Windows服务进行安装和运行,该用户应该是该的成员C:\Documents and Settings\username\My Documents\DownloadsusernameECHO %USERNAME%Administrators

从存档中提取所有文件。与Windows资源管理器集成的提取向导适合执行此任务。(如果使用不同的存档程序,请确保它从存档中提取所有文件和目录,并保留存档的目录结构。)当您询问目标目录时,请输入 C:\,这将导致“提取向导”提取存档到目录 将该目录重命名为C:\mysql-cluster-gpl-ver-winarchC:\mysql

可以将NDB Cluster二进制文件安装到以外的目录中C:\mysql\bin; 但是,如果这样做,则必须相应地修改此过程中显示的路径。特别是,如果将MySQL服务器(SQL节点)二进制文件安装到C:\mysqlor 之外的位置 C:\Program Files\MySQL\MySQL Server 5.7,或者如果SQL节点的数据目录位于非C:\mysql\dataor 之外的位置 C:\Program Files\MySQL\MySQL Server 5.7\data,则必须在命令行上使用额外的配置选项或将其添加到my.inimy.cnf启动SQL节点时的文件。有关配置MySQL服务器以在非标准位置运行的更多信息,请参见 第2.3.5节“在Microsoft Windows上安装MySQL使用 noinstallZIP档案“

对于具有NDB群集支持的MySQL服务器作为NDB群集的一部分运行,必须使用选项 --ndbcluster--ndb-connectstring虽然可以在命令行上指定这些选项,但通常将它们放在选项文件中会更方便。为此,请在记事本或其他文本编辑器中创建一个新的文本文件。在此文件中输入以下配置信息:

的[mysqld]
#mysqld进程的选项:
ndbcluster#运行NDB存储引擎
ndb-connectionstring = 198.51.100.10#管理服务器的位置

如果需要,您可以添加此MySQL服务器使用的其他选项(请参见第2.3.5.2节“创建选项文件”),但该文件必须至少包含显示的选项。将此文件另存为 C:\mysql\my.ini这完成了SQL节点的安装和设置。

数据节点。  Windows主机上的NDB群集数据节点只需要一个可执行文件,即ndbd.exendbmtd.exe中的一个在这个例子中,我们假设您使用的是ndbd.exe,但是在使用ndbmtd.exe时适用相同的说明在这里你想运行一个数据节点(具有IP电脑地址198.51.100.30和198.51.100.40)每台计算机上,创建目录 C:\mysqlC:\mysql\binC:\mysql\cluster-data; 然后,在计算机上,您下载并提取 no-install档案,找到 ndbd.exeC:\mysql\bin目录。将此文件复制到C:\mysql\bin两个数据节点主机上的每个目录中。

要作为NDB群集的一部分运行,必须为每个数据节点提供管理服务器的地址或主机名。您可以在启动每个数据节点进程时使用--ndb-connectstringor -c选项在命令行上提供此信息 但是,通常最好将此信息放入选项文件中。为此,请在记事本或其他文本编辑器中创建一个新的文本文件,然后输入以下文本:

[mysql_cluster]
#数据节点进程的选项:
ndb-connectionstring = 198.51.100.10#管理服务器的位置

将此文件保存为C:\mysql\my.ini数据节点主机上的文件创建另一个包含相同信息的文本文件,并将其保存 C:mysql\my.ini到另一个数据节点主机上,或将my.ini文件从第一个数据节点主机复制到第二个数据节点主机,确保将副本放在第二个数据节点的C:\mysql目录中。两个数据节点主机现在都准备好在NDB集群中使用,只留下管理节点进行安装和配置。

管理节点。  用于托管NDB集群管理节点的计算机上唯一需要的可执行程序是管理服务器程序ndb_mgmd.exe但是,为了在启动NDB集群后管理NDB集群,还应该将NDB集群管理客户端程序ndb_mgm.exe安装在与管理服务器相同的计算机上。在您下载并提取no-install存档的计算机上找到这两个程序 ; 这应该是C:\mysql\binSQL节点主机上的目录创建目录C:\mysql\bin 在具有IP地址198.51.100.10的计算机上,然后将这两个程序复制到此目录。

您现在应该创建两个配置文件供以下用户使用 ndb_mgmd.exe

  1. 本地配置文件,用于提供特定于管理节点自身的配置数据。通常,此文件只需提供NDB群集全局配置文件的位置(请参阅第2项)。

    要创建此文件,请在记事本或其他文本编辑器中启动一个新的文本文件,然后输入以下信息:

    [mysql_cluster]
    #管理节点进程的选项
    配置文件中= C:/mysql/bin/config.ini
    

    将该文件保存为文本文件 C:\mysql\bin\my.ini

  2. 全局配置文件,管理节点可从中获取管理整个NDB群集的配置信息。该文件至少必须包含NDB群集中每个节点的一节以及管理节点和所有数据节点(HostName配置参数)的IP地址或主机名建议包括以下附加信息:

    使用记事本等文本编辑器创建新的文本文件,然后输入以下信息:

    [ndbd默认]
    #影响所有数据节点上的ndbd进程的选项:
    NoOfReplicas = 2#副本数量
    DataDir = C:/ mysql / cluster-data#每个数据节点数据文件的目录
                                        #在目录路径中使用正斜杠,
                                        #而不是反斜杠。这是对的;
                                        #请参阅文本中的重要说明
    DataMemory = 80M#分配给数据存储器的内存
    IndexMemory = 18M#分配给索引存储的内存
                      #对于DataMemory和IndexMemory,我们已经使用了
                      # 默认值。自从“世界”数据库占据了
                      #只有500KB左右,这应该足够了
                      #这个例子集群设置。
    
    [ndb_mgmd]
    #管理流程选项:
    HostName = 198.51.100.10#管理节点的主机名或IP地址
    DataDir = C:/ mysql / bin / cluster-logs#管理节点日志文件的目录
    
    [NDBD]
    #数据节点“A”的选项:
                                    #(每个数据节点一个[ndbd]节)
    HostName = 198.51.100.30#主机名或IP地址
    
    [NDBD]
    #数据节点“B”的选项:
    HostName = 198.51.100.40#主机名或IP地址
    
    的[mysqld]
    #SQL节点选项:
    HostName = 198.51.100.20#主机名或IP地址
    

    将该文件保存为文本文件 C:\mysql\bin\config.ini

重要

\在Windows上的NDB群集使用的程序选项或配置文件中指定目录路径时,不能使用 单个反斜杠字符()。相反,您必须使用第二个反斜杠(\\来转义每个反斜杠字符,或者使用正斜杠字符(/替换反斜杠例如,[ndb_mgmd]NDB群集config.ini文件部分中 的以下行 不起作用:

DATADIR = C:\ MySQL的\ BIN \群集日志

相反,您可以使用以下任一项:

DataDir = C:\\ mysql \\ bin \\ cluster-logs#转义反斜杠
DataDir = C:/ mysql / bin / cluster-logs#正斜杠

为了简洁和易读,我们建议您在Windows上的NDB群集程序选项和配置文件中使用的目录路径中使用正斜杠。

21.2.3.2在Windows上从Source编译和安装NDB集群

Oracle为Windows提供了预编译的NDB Cluster二进制文件,对大多数用户来说应该是足够的。但是,如果您愿意,也可以从源代码编译NDB Cluster for Windows。执行此操作的过程几乎与用于编译Windows的标准MySQL服务器二进制文件的过程相同,并使用相同的工具。但是,有两个主要区别:

  • 要构建NDB群集,您必须使用NDB群集源,您可以从http://dev.mysql.com/downloads/cluster/获取NDB群集源

    试图从标准MySQL服务器的源代码构建NDB集群可能不会成功,并且不受Oracle支持。

  • 除了希望用于CMake的其他构建选项外, 您还必须使用WITH_NDBCLUSTER_STORAGE_ENGINEWITH_NDBCLUSTER选项 来配置构建 作为别名支持 ,并以完全相同的方式工作。) WITH_NDBCLUSTERWITH_NDBCLUSTER_STORAGE_ENGINE

重要

WITH_NDB_JAVA选项默认启用。这意味着,默认情况下,如果 CMake在您的系统上找不到Java的位置,配置过程将失败; 如果您不希望启用Java和ClusterJ支持,则必须通过使用配置构建明确指出 -DWITH_NDB_JAVA=OFF(缺陷号12379735)用于 WITH_CLASSPATH在需要时提供Java类路径。

有关特定于构建NDB群集的CMake选项的更多信息,请参阅 编译NDB群集的选项

构建过程完成后,您可以创建一个包含已编译二进制文件的Zip存档; 第2.9.2节“使用标准源代码发布安装MySQL”提供了在Windows系统上执行此任务所需的命令。NDB集群二进制文件可以bin 在生成的归档目录中找到,该目录与归档等效 no-install,可以以相同的方式进行安装和配置。有关更多信息,请参见 第21.2.3.1节“从二进制版本在Windows上安装NDB群集”

21.2.3.3在Windows上初次启动NDB集群

一旦NDB集群可执行文件和所需的配置文件就位后,执行集群的初始启动仅需要为集群中的所有节点启动NDB集群可执行文件。每个群集节点进程必须分别启动,并在它所在的主机上启动。应首先启动管理节点,然后启动数据节点,最后启动任何SQL节点。

  1. 在管理节点主机上,从命令行发出以下命令以启动管理节点进程。输出应该类似于这里显示的内容:

    C:\ mysql的\ BIN> ndb_mgmd
    2010-06-23 07:53:34 [MgmtSrvr] INFO  -  NDB集群管理服务器。MySQL的 -  22年7月5日 -  NDB-7.5.11
    2010-06-23 07:53:34 [MgmtSrvr] INFO  - 从'config.ini'读取群集配置
    

    管理节点进程继续将日志输出打印到控制台。这是正常的,因为管理节点没有作为Windows服务运行。(如果您在类Unix平台(如Linux)上使用过NDB集群,您可能会注意到管理节点在Windows上的默认行为与其在Unix系统上的行为有着相反的效果,在Unix系统中它默认作为Unix运行daemon进程,在Windows上运行的NDB Cluster数据节点进程也是如此。)因此,请勿关闭运行ndb_mgmd.exe的窗口 ; 这样做会杀死管理节点进程。(看到 第21.2.3.4节“将NDB群集进程安装为Windows服务”,我们演示了如何安装和运行NDB群集进程作为Windows服务。)

    必需的-f选项告诉管理节点在哪里查找全局配置文件(config.ini)。这个选项的长形式是--config-file

    重要

    NDB集群管理节点缓存它读取的配置数据config.ini; 一旦它创建了一个配置缓存,它就会config.ini在随后的启动中忽略该 文件,除非被强制执行。这意味着,如果由于此文件中的错误而导致管理节点无法启动,则必须config.ini在更正其中的任何错误后重新读取管理节点 您可以通过在命令行上使用 选项启动ndb_mgmd.exe来完成此操作 这些选项都可以用来刷新配置缓存。 --reload--initial

    在管理节点的my.ini文件中使用这些选项中的任何一个都没有必要或不可取

    有关可与ndb_mgmd一起使用的选项的其他信息,请参见 第21.4.4节“ ndb_mgmd - NDB群集管理服务器守护进程”以及第21.4.32节“NDB群集程序通用选项 - NDB群集通用选项”程序“

  2. 在每个数据节点主机上,运行此处显示的命令以启动数据节点进程:

    C:\ mysql的\ BIN> ndbd
    2010-06-23 07:53:46 [ndbd] INFO  - 从'localhost:1186'获取的配置,代:1
    

    在每种情况下,来自数据节点进程的第一行输出应该与前面的示例中所示的内容类似,并且后面跟有额外的日志输出行。与管理节点进程一样,这是正常的,因为数据节点没有作为Windows服务运行。因此,请勿关闭运行数据节点进程的控制台窗口; 这样杀死 ndbd.exe(有关更多信息,请参见 第21.2.3.4节“将NDB群集进程安装为Windows服务”。)

  3. 不要启动SQL节点; 直到数据节点完成启动才能连接到群集,这可能需要一些时间。相反,在管理节点主机上的新控制台窗口中,启动应位于 管理节点主机上的NDB群集管理客户端ndb_mgm.exeC:\mysql\bin(不要试图通过键入CTRL + C来重新使用运行 ndb_mgmd.exe的控制台窗口 ,因为这会杀死管理节点。)结果输出应如下所示:

    C:\ mysql的\ BIN> ndb_mgm
    -  NDB群集 - 管理客户端 - 
    ndb_mgm>
    

    出现提示时ndb_mgm>,表示管理客户端已准备好接收NDB集群管理命令。通过ALL STATUS在管理客户端提示符处输入您可以观察数据节点的状态 该命令导致数据节点的启动顺序的运行报告,该报告应该如下所示:

    ndb_mgm> ALL STATUS
    连接到管理服务器:localhost:1186
    节点2:启动(上一次完成阶段3)(mysql-5.7.22-ndb-7.5.11)
    节点3:启动(上一个完成阶段3)(mysql-5.7.22-ndb-7.5.11)
    
    节点2:启动(上次完成阶段4)(mysql-5.7.22-ndb-7.5.11)
    节点3:启动(上一次完成阶段4)(mysql-5.7.22-ndb-7.5.11)
    
    节点2:开始(版本7.5.11)
    节点3:开始(版本7.5.11)
    
    ndb_mgm>
    
    注意

    管理客户端中发出的命令不区分大小写; 我们使用大写字母作为这些命令的规范形式,但您在输入到ndb_mgm客户端时不需要遵守此惯例 有关更多信息,请参见第21.5.2节“NDB集群管理客户端中的命令”

    ALL STATUS根据数据节点能够启动的速度,您使用的NDB Cluster软件的发行版本号以及其他因素, 产生的输出可能与此处显示的有所不同。重要的是,当你看到两个数据节点都已经启动时,你就可以启动SQL节点了。

    你可以让ndb_mgm.exe运行; 它对NDB集群的性能没有负面影响,我们将在下一步中使用它来验证SQL节点是否在启动后连接到集群。

  4. 在指定为SQL节点主机的计算机上,打开一个控制台窗口并导航至解包NDB集群二进制文件的目录(如果您遵循我们的示例,则为C:\mysql\bin)。

    通过从命令行调用mysqld.exe启动SQL节点,如下所示:

    C:\ mysql的\ BIN> mysqld --console
    

    --console选项会将日志记录信息写入控制台,这对发生问题时可能会有所帮助。(一旦您满意SQL节点以令人满意的方式运行,您可以停止并在没有该--console选项的情况下重新启动它 ,以便日志记录正常执行。)

    管理节点主机上运行管理客户机(ndb_mgm.exe的控制台窗口中,输入SHOW命令,该命令应产生类似于此处显示的输出命令:

    ndb_mgm> SHOW
    连接到管理服务器:localhost:1186
    群集配置
    ---------------------
    [ndbd(NDB)] 2节点(s)
    id = 2 @ 198.51.100.30(版本:5.7.22-ndb-7.5.11,节点组:0,*)
    id = 3 @ 198.51.100.40(版本:5.7.22-ndb-7.5.11,节点组:0)
    
    [ndb_mgmd(MGM)] 1个节点
    id = 1 @ 198.51.100.10(版本:5.7.22-ndb-7.5.11)
    
    [mysqld(API)] 1个节点
    id = 4 @ 198.51.100.20(版本:5.7.22-ndb-7.5.11)
    

    您还可以使用该 语句验证SQL节点是否已连接到mysql客户端(mysql.exe)中 的NDB群集SHOW ENGINE NDB STATUS

您现在应该准备好使用NDB集群的NDBCLUSTER存储引擎来处理数据库对象和数据 有关更多信息和示例请参见 第21.2.6节“带表和数据的NDB群集示例”

您还可以将ndb_mgmd.exendbd.exendbmtd.exe 作为Windows服务安装。有关如何执行此操作的信息,请参见 第21.2.3.4节“将NDB群集进程安装为Windows服务”)。

21.2.3.4将NDB群集进程安装为Windows服务

一旦您满意NDB群集正在按需运行,您可以将管理节点和数据节点安装为Windows服务,以便在Windows启动或停止时自动启动和停止这些进程。这也可以使用适当的NET STARTNET STOP命令或使用Windows图形服务实用程序从命令行控制这些进程

将程序安装为Windows服务通常必须使用对系统具有管理员权限的帐户完成。

要在Windows上将管理节点作为服务安装,请使用该选项从托管管理节点的计算机上的命令行 调用 ndb_mgmd.exe--install,如下所示:

C:\> C:\mysql\bin\ndb_mgmd.exe --install
安装服务“NDB群集管理服务器”
  作为'“C:\ mysql \ bin \ ndbd.exe”“--service = ndb_mgmd”'
服务已成功安装。
重要

将NDB Cluster程序作为Windows服务安装时,应始终指定完整路径; 否则服务安装可能会失败并显示错误系统找不到指定的文件

--install选项必须首先使用的提前,可能用于指定任何其他选项,ndb_mgmd.exe但是,最好在选项文件中指定这些选项。如果您的选项文件不在ndb_mgmd.exe 输出所示的默认位置之一中,则--help可以使用该--config-file选项指定位置

现在您应该能够像这样启动和停止管理服务器:

C:\> NET START ndb_mgmd
NDB群集管理服务器服务正在启动。
NDB群集管理服务器服务已成功启动。

C:\> NET STOP ndb_mgmd
NDB群集管理服务器服务正在停止..
NDB群集管理服务器服务已成功停止。

您还可以使用描述性名称将管理服务器作为Windows服务启动或停止,如下所示:

C:\> NET START 'NDB Cluster Management Server'
NDB群集管理服务器服务正在启动。
NDB群集管理服务器服务已成功启动。

C:\> NET STOP  'NDB Cluster Management Server'
NDB群集管理服务器服务正在停止..
NDB群集管理服务器服务已成功停止。

但是,指定一个简短的服务名称或允许在安装服务时使用默认服务名称通常会更简单,然后在启动或停止服务时引用该名称。要指定除以外的服务名称 ndb_mgmd,请将其附加到该 --install选项,如以下示例所示:

C:\> C:\mysql\bin\ndb_mgmd.exe --install=mgmd1
安装服务“NDB群集管理服务器”
  as'“C:\ mysql \ bin \ ndb_mgmd.exe”“--service = mgmd1”'
服务已成功安装。

现在您应该可以使用您指定的名称来启动或停止服务,如下所示:

C:\> NET START mgmd1
NDB群集管理服务器服务正在启动。
NDB群集管理服务器服务已成功启动。

C:\> NET STOP mgmd1
NDB群集管理服务器服务正在停止..
NDB群集管理服务器服务已成功停止。

要删除管理节点服务,请使用该 选项调用 ndb_mgmd.exe--remove,如下所示:

C:\> C:\mysql\bin\ndb_mgmd.exe --remove
删除服务“NDB群集管理服务器”
服务已成功删除。

如果您使用默认的服务名称来安装该服务,则可以通过将该名称作为--remove选项的值来移除该服务,如下所示:

C:\> C:\mysql\bin\ndb_mgmd.exe --remove=mgmd1
删除服务'mgmd1'
服务已成功删除。

可以使用ndbd.exe(或ndbmtd.exe--install选项以 类似的方式将NDB群集数据节点进程安装为Windows服务 ,如下所示:

C:\> C:\mysql\bin\ndbd.exe --install
安装服务'NDB集群数据节点守护进程'为'“C:\ mysql \ bin \ ndbd.exe”“--service = ndbd”'
服务已成功安装。

现在可以使用net startnet stop使用默认服务名称或描述性名称来启动或停止数据节点,如下例所示:

C:\> NET START ndbd
NDB群集数据节点守护程序服务正在启动。
NDB群集数据节点守护程序服务已成功启动。

C:\> NET STOP ndbd
NDB群集数据节点守护程序服务正在停止..
NDB群集数据节点守护程序服务已成功停止。

C:\> NET START 'NDB Cluster Data Node Daemon'
NDB群集数据节点守护程序服务正在启动。
NDB群集数据节点守护程序服务已成功启动。

C:\> NET STOP 'NDB Cluster Data Node Daemon'
NDB群集数据节点守护程序服务正在停止..
NDB群集数据节点守护程序服务已成功停止。

要删除数据节点服务,使用 --remove选项调用 ndbd.exe,如下所示:

C:\> C:\mysql\bin\ndbd.exe --remove
删除服务'NDB群集数据节点守护进程'
服务已成功删除。

ndb_mgmd.exe(和 mysqld.exe)一样,将ndbd.exe作为Windows服务安装时 ,也可以将该服务的名称指定为值 --install,然后在启动或停止服务时使用它,如下所示:

C:\> C:\mysql\bin\ndbd.exe --install=dnode1
安装服务'dnode1'为'“C:\ mysql \ bin \ ndbd.exe”“--service = dnode1”'
服务已成功安装。

C:\> NET START dnode1
NDB群集数据节点守护程序服务正在启动。
NDB群集数据节点守护程序服务已成功启动。

C:\> NET STOP dnode1
NDB群集数据节点守护程序服务正在停止..
NDB群集数据节点守护程序服务已成功停止。

如果您在安装数据节点服务时指定了服务名称,则也可以在删除它时使用该名称,方法是将其作为--remove选项的值传递 ,如下所示:

C:\> C:\mysql\bin\ndbd.exe --remove=dnode1
删除服务'dnode1'
服务已成功删除。

使用mysqld --installNET STARTNET STOPmysqld 以类似的方式将SQL节点安装为Windows服务,启动服务,停止服务和删除服务--remove有关更多信息,请参见第2.3.5.8节“将MySQL作为Windows服务启动”

21.2.4 NDB集群的初始配置

在本节中,我们将通过创建和编辑配置文件来讨论已安装的NDB群集的手动配置。

NDB集群还提供了一个GUI安装程序,可用于执行配置,而无需在单独的应用程序中编辑文本文件。有关更多信息,请参见 第21.2.1节“NDB群集自动安装程序”

对于我们的四节点四主机NDB群集(请参阅 群集节点和主机),需要编写四个配置文件,每个节点主机一个。

  • 每个数据节点或SQL节点都需要一个my.cnf文件,文件提供两条信息:一个连接字符串,告诉节点在哪里找到管理节点,另一条是告诉该主机上的MySQL服务器(托管数据节点的机器)以启用该 NDBCLUSTER存储引擎。

    有关连接字符串的更多信息,请参见 第21.3.3.3节“NDB群集连接字符串”

  • 管理节点需要一个config.ini 文件,告诉它要维护多少副本,为每个数据节点上的数据和索引分配多少内存,在哪里找到数据节点,在每个数据节点上将数据保存到磁盘的位置以及在哪里查找任何SQL节点。

配置数据节点和SQL节点。 my.cnf数据节点所需文件非常简单。配置文件应该位于/etc目录中,并且可以使用任何文本编辑器进行编辑。(如果该文件不存在,则创建该文件。)例如:

外壳> vi /etc/my.cnf
注意

我们在这里使用vi来创建文件,但是任何文本编辑器都应该可以正常工作。

对于我们示例设置中的每个数据节点和SQL节点, my.cnf应该如下所示:

的[mysqld]
#mysqld进程的选项:
ndbcluster#运行NDB存储引擎

[mysql_cluster]
#NDB群集进程的选项:
ndb-connectionstring = 198.51.100.10#管理服务器的位置

输入上述信息后,保存该文件并退出文本编辑器。为托管数据节点A,数据节点B和SQL节点的计算机执行此操作

重要

一旦你开始的mysqld与过程ndbcluster,并 ndb-connectstring在参数 [mysqld][mysql_cluster]该路段 my.cnf的文件如前所示,你不能执行CREATE TABLE或者 ALTER TABLE不具有实际开始集群语句。否则,这些语句会失败并显示错误。这是设计。

配置管理节点。  配置管理节点的第一步是创建可以找到配置文件的目录,然后创建文件本身。例如(正在运行 root):

shell> mkdir /var/lib/mysql-cluster
shell> cd /var/lib/mysql-cluster
shell>vi config.ini

对于我们的代表设置,该config.ini 文件应该如下所示:

[ndbd默认]
#影响所有数据节点上的ndbd进程的选项:
NoOfReplicas = 2#副本数量
DataMemory = 80M#为数据存储分配多少内存
IndexMemory = 18M#为索引存储分配多少内存
                  #对于DataMemory和IndexMemory,我们已经使用了
                  # 默认值。自从“世界”数据库占据了
                  #只有500KB左右,这应该足够了
                  #这个例子NDB集群设置。
ServerPort = 2202#这是默认值; 不过,你可以使用任何
                  #端口对于群集中的所有主机都是免费的
                  #注1:建议您不要指定端口
                  #号码,只需允许使用默认值即可
                  相反
                  #注2:该端口以前使用PortNumber指定 
                  #TCP参数; 此参数在NDB中不再可用
                  #集群7.5。

[ndb_mgmd]
#管理流程选项:
HostName = 198.51.100.10#MGM节点的主机名或IP地址
DataDir = / var / lib / mysql-cluster#MGM节点日志文件的目录

[NDBD]
#数据节点“A”的选项:
                                #(每个数据节点一个[ndbd]节)
HostName = 198.51.100.30#主机名或IP地址
NodeId = 2#此数据节点的节点ID
DataDir = / usr / local / mysql / data#这个数据节点的数据文件的目录

[NDBD]
#数据节点“B”的选项:
HostName = 198.51.100.40#主机名或IP地址
NodeId = 3#此数据节点的节点ID
DataDir = / usr / local / mysql / data#这个数据节点的数据文件的目录

的[mysqld]
#SQL节点选项:
HostName = 198.51.100.20#主机名或IP地址
                                #(其他mysqld连接可以
                                #为这个节点指定了各种
                                #用途,如运行ndb_restore)
注意

world数据库可以从http://dev.mysql.com/doc/index-other.html下载

在创建了所有配置文件并指定了这些最小选项后,即可开始启动群集并验证所有进程正在运行。我们将在第21.2.5节“NDB集群的初始启动”中讨论如何完成这个过程

有关可用的NDB群集配置参数及其用途的更多详细信息,请参见 第21.3.3节“NDB群集配置文件”第21.3 节“NDB群集的配置有关配置NDB群集与备份有关的信息,请参见 第21.5.3.3节“配置NDB群集备份”

注意

群集管理节点的默认端口是1186; 数据节点的默认端口是2202.但是,群集可以自动为已经空闲的数据节点分配数据节点的端口。

21.2.5 NDB集群的初始启动

配置完成后启动集群并不是非常困难。每个群集节点进程必须分别启动,并在其所在的主机上启动。应首先启动管理节点,然后启动数据节点,最后启动任何SQL节点:

  1. 在管理主机上,从系统shell发出以下命令以启动管理节点进程:

    外壳> ndb_mgmd -f /var/lib/mysql-cluster/config.ini
    

    首次启动时, 必须使用选项告知ndb_mgmd在哪里查找其配置文件 (有关详细信息,请参见 第21.4.4节“ ndb_mgmd - NDB群集管理服务器守护进程”。) -f--config-file

    有关可与ndb_mgmd一起使用的其他选项 ,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

  2. 在每个数据节点主机上,运行以下命令启动 ndbd进程:

    外壳> ndbd
    
  3. 如果您使用RPM文件在SQL节点所在的集群主机上安装MySQL,则可以(也应该)使用提供的启动脚本在SQL节点上启动MySQL服务器进程。

如果一切顺利,并且集群已正确设置,则集群现在应该可以运行。您可以通过调用ndb_mgm管理节点客户端来进行测试输出结果应该如下所示,尽管您可能会在输出中看到一些细微的差异,具体取决于您使用的MySQL的确切版本:

外壳> ndb_mgm
-  NDB群集 - 管理客户端 - 
ndb_mgm> SHOW
连接到管理服务器:localhost:1186
群集配置
---------------------
[ndbd(NDB)] 2节点(s)
id = 2 @ 198.51.100.30(版本:5.7.22-ndb-7.5.11,节点组:0,*)
id = 3 @ 198.51.100.40(版本:5.7.22-ndb-7.5.11,节点组:0)

[ndb_mgmd(MGM)] 1个节点
id = 1 @ 198.51.100.10(版本:5.7.22-ndb-7.5.11)

[mysqld(API)] 1个节点
id = 4 @ 198.51.100.20(版本:5.7.22-ndb-7.5.11)

此处引用SQL节点 [mysqld(API)],它反映了mysqld进程充当NDB集群API节点的事实

注意

为输出中给定的NDB群集SQL或其他API节点显示的IP地址SHOW 是SQL或API节点用于连接到群集数据节点而不是任何管理节点的地址。

您现在应该准备好使用NDB群集中的数据库,表格和数据。有关简要讨论,请参见 第21.2.6节“使用表和数据的NDB群集示例”

21.2.6带表格和数据的NDB群集示例

注意

本节中的信息适用于在Unix和Windows平台上运行的NDB Cluster。

在NDB集群中处理数据库表和数据与在标准MySQL中这样做没有多大区别。要记住两点:

  • 要在集群中复制表,它必须使用 NDBCLUSTER存储引擎。要指定此项,请在创建表格时使用ENGINE=NDBCLUSTERENGINE=NDB选项:

    CREATE TABLE tbl_name)ENGINE = NDBCLUSTER;
    col_name column_definitions

    或者,对于使用不同存储引擎的现有表,请使用ALTER TABLE 以更改要使用的表 NDBCLUSTER

    ALTER TABLE tbl_nameENGINE = NDBCLUSTER;
    
  • 每个NDBCLUSTER表都有一个主键。如果在创建表时用户未定义主键,则NDBCLUSTER 存储引擎会自动生成一个隐藏的主键就像任何其他表索引一样,这样的键占用空间。(由于内存不足以适应这些自动创建的索引,遇到问题并不罕见。)

如果您使用mysqldump的输出从现有数据库导入表,则可以在文本编辑器中打开SQL脚本,并将该ENGINE 选项添加到任何表创建语句,或者替换任何现有的 ENGINE选项。假设您world在另一个不支持NDB集群的MySQL服务器上示例数据库,并且您想要导出该 City表:

外壳> mysqldump --add-drop-table world City > city_table.sql

生成的city_table.sql文件将包含此表创建语句(以及INSERT导入表数据所需语句):

DROP TABLE IF EXISTS`City`;
CREATE TABLE`城市'(
  `ID` int(11)NOT NULL auto_increment,
  `Name` char(35)NOT NULL default'',
  `CountryCode` char(3)NOT NULL默认'',
  `区`char(20)NOT NULL默认'',
  `Population` int(11)NOT NULL默认为'0',
  主键(`ID`)
)ENGINE = MyISAM DEFAULT CHARSET = latin1;

INSERT INTO`City` VALUES(1,'Kabul','AFG','Kabol',1780000);
插入`City` VALUES(2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO`City` VALUES(3,'Herat','AFG','Herat',186800);
(remaining INSERT statements omitted)

您需要确保MySQL使用NDBCLUSTER该表存储引擎。这可以通过两种方式来完成。其中之一是在将表导入到群集数据库之前修改表定义 City表格为例,修改ENGINE定义选项如下:

DROP TABLE IF EXISTS`City`;
CREATE TABLE`城市'(
  `ID` int(11)NOT NULL auto_increment,
  `Name` char(35)NOT NULL default'',
  `CountryCode` char(3)NOT NULL默认'',
  `区`char(20)NOT NULL默认'',
  `Population` int(11)NOT NULL默认为'0',
  主键(`ID`)ENGINE = NDBCLUSTER DEFAULT CHARSET = latin1;

INSERT INTO`City` VALUES(1,'Kabul','AFG','Kabol',1780000);
插入`City` VALUES(2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO`City` VALUES(3,'Herat','AFG','Herat',186800);
(remaining INSERT statements omitted)

这必须完成以定义每个要成为集群数据库一部分的表。做到这一点最简单的方法是做一个搜索和替换包含定义和替换的所有实例的文件 如果您不想修改文件,则可以使用未修改的文件创建表格,然后使用它们更改其存储引擎。本节稍后会详细介绍这些细节。 TYPE=engine_nameENGINE=engine_nameENGINE=NDBCLUSTERALTER TABLE

假定您已经创建了一个world在集群的SQL节点上命名的数据库 ,那么可以使用mysql命令行客户端以city_table.sql通常方式读取 和创建并填充相应的表:

外壳> mysql world < city_table.sql

请记住,必须在运行SQL节点的主机(在本例中,在具有IP地址的计算机上)上执行上述命令,这一点非常重要 198.51.100.20

world在SQL节点上创建整个数据库的副本,请在非群集服务器上使用mysqldump将数据库导出到名为 world.sql; 例如,在 /tmp目录中。然后像刚刚描述的那样修改表定义,并像下面这样将文件导入群集的SQL节点:

外壳> mysql world < /tmp/world.sql

如果将文件保存到其他位置,请相应地调整前面的说明。

SELECT在SQL节点上 运行查询与在任何其他MySQL服务器上运行它们没有区别。要从命令行运行查询,首先需要以通常的方式登录到MySQL监视器(rootEnter password:提示符指定 密码):

外壳> mysql -u root -p
输入密码:
欢迎来到MySQL监视器。命令结束于; 或\ g。
你的MySQL连接ID是1到服务器版本:5.7.22-ndb-7.5.11

键入'help' 或'\ h'寻求帮助。输入'\ c'清除缓冲区。

MySQL的>

我们只需使用MySQL服务器的root 帐户,并假定您已遵循安装MySQL服务器的标准安全预防措施,包括设置强root密码。有关更多信息,请参见 第2.10.4节“保护初始MySQL帐户”

值得考虑的是,群集节点 在彼此访问时使用MySQL特权系统。设置或更改MySQL用户帐户(包括root帐户)只会影响访问SQL节点的应用程序,而不会影响节点之间的交互。有关更多信息请参见 第21.5.12.2节“NDB集群和MySQL特权”

如果您ENGINE在导入SQL脚本之前未修改表定义中子句,则应该在此处运行以下语句:

mysql> USE world;
mysql> ALTER TABLE City ENGINE=NDBCLUSTER;
mysql> ALTER TABLE Country ENGINE=NDBCLUSTER;
mysql>ALTER TABLE CountryLanguage ENGINE=NDBCLUSTER;

选择数据库并对该数据库中的表运行SELECT查询也是以通常的方式完成的,就像退出MySQL监视器一样:

mysql> USE world;
mysql>SELECT Name, Population FROM City ORDER BY Population DESC LIMIT 5;
+ ----------- ------------ + +
| 名称| 人口|
+ ----------- ------------ + +
| 孟买| 10500000 |
| 首尔| 9981619 |
| 圣保罗| 9968485 |
| 上海| 9696300 |
| 雅加达| 9604900 |
+ ----------- ------------ + +
5排(0.34秒)

MySQL的> \q
再见

外壳>

使用MySQL的应用程序可以使用标准API来访问 NDB表。请记住,您的应用程序必须访问SQL节点,而不是管理或数据节点。这个简短的例子展示了我们如何SELECT通过使用mysqli 运行在网络上其他地方的W​​eb服务器上的PHP 5.X 扩展执行刚刚显示语句

<!DOCTYPE HTML PUBLIC“ -  // W3C // DTD HTML 4.01 Transitional // EN”
  “http://www.w3.org/TR/html4/loose.dtd”>
<HTML>
<HEAD>
  <meta http-equiv =“Content-Type”
           content =“text / html; charset = iso-8859-1”>
  <title> SIMPLE mysqli SELECT </ title>
</ HEAD>
<BODY>
<?PHP
  #连接到SQL节点:
  $ link = new mysqli('198.51.100.20','root',' root_password','world');
  mysqli构造函数的#参数是:
  #主机,用户,密码,数据库

  if(mysqli_connect_errno())
    die(“Connect failed:”。mysqli_connect_error());

  $ query =“选择名称,人口
            从城市
            ORDER BY Population DESC
            限制5“;

  #如果没有错误...
  if($ result = $ link-> query($ query))
  {
?>
<table border =“1”width =“40%”cellpadding =“4”cellspacing =“1”>
  <TBODY>
  <TR>
    <th width =“10%”>城市</ th>
    <TH>人口</次>
  </ TR>
<?
    #然后显示结果...
    while($ row = $ result-> fetch_object())
      printf(“<tr> \ n <td align = \”center \“>%s </ td> <td>%d </ td> \ n </ tr> \ n”,
              $ row-> Name,$ row-> Population);
?>
  </ TBODY
</ TABLE>
<?
  #...并验证检索到的行数
    printf(“<p>受影响的行:%d </ p> \ n”,$ link-> affected_rows);
  }
  其他
    #否则,告诉我们出了什么问题
    echo mysqli_error();

  #释放结果集和mysqli连接对象
  $ result->接近();
  $链路>接近();
?>
</ BODY>
</ HTML>

我们假设运行在Web服务器上的进程可以达到SQL节点的IP地址。

以类似的方式,您可以像使用MySQL一样使用MySQL C API,Perl-DBI,Python-mysql或MySQL连接器来执行数据定义和操作任务。

21.2.7安全关闭并重新启动NDB群集

要关闭集群,请在承载管理节点的计算机上的shell中输入以下命令:

外壳> ndb_mgm -e shutdown

-e此处选项用于将命令从shell 传递给ndb_mgm客户端。有关此选项的更多信息请参见 第21.4.32节“NDB群集程序通用选项 - NDB群集程序通用选项”。)该命令使 ndb_mgmndb_mgmd和所有 ndbdndbmtd进程正常终止。任何SQL节点都可以使用mysqladmin shutdown和其他方式终止 在Windows平台上,假设您已将SQL节点安装为Windows服务,则可以使用NET STOP MYSQL

要在Unix平台上重新启动集群,请运行以下命令:

  • 在管理主机上(198.51.100.10在我们的示例设置中):

    外壳> ndb_mgmd -f /var/lib/mysql-cluster/config.ini
    
  • 在每个数据节点主机(198.51.100.30198.51.100.40)上:

    外壳> ndbd
    
  • 使用ndb_mgm客户端验证两个数据节点是否已成功启动。

  • 在SQL主机(198.51.100.20)上:

    外壳> mysqld_safe &
    

在Windows平台上,假设您已将所有NDB群集进程作为使用默认服务名称的Windows服务安装(请参见 第21.2.3.4节“将NDB群集进程安装为Windows服务”),您可以按如下方式重新启动群集:

  • 在管理主机上(198.51.100.10在我们的示例设置中),执行以下命令:

    C:\> NET START ndb_mgmd
    
  • 在每个数据节点主机(198.51.100.30198.51.100.40)上,执行以下命令:

    C:\> NET START ndbd
    
  • 在管理节点主机上,使用 ndb_mgm客户端验证管理节点和两个数据节点是否已成功启动(请参见 第21.2.3.3节“Windows上NDB群集的初始启动”)。

  • 在SQL节点host(198.51.100.20)上,执行以下命令:

    C:\> NET START mysql
    

在生产环境中,通常不希望完全关闭集群。在许多情况下,即使在进行配置更改或升级群集硬件或软件(或两者)时需要关闭各个主机,也可以在不关闭群集的情况下通过执行滚动来完成 重新启动集群。有关执行此操作的更多信息,请参见 第21.5.5节“执行NDB群集的滚动重新启动”

21.2.8升级和降级NDB集群

本节提供有关执行升级和降级以及兼容性矩阵和注释的NDB Cluster软件和不同NDB Cluster 7.5版本之间的表格文件兼容性信息。在尝试升级或降级之前,您应该已经熟悉安装和配置NDB集群。请参见 第21.3节“NDB群集的配置”

重要

NDBCLUSTER本节只考虑 MySQL版本之间的兼容性 ,并且可能还有其他问题需要考虑。与任何其他MySQL软件升级或降级一样,强烈建议您在尝试升级或降级NDB群集软件之前,先查看MySQL手册的相关部分,以了解您希望从中迁移的MySQL版本的哪些部分请参见 第2.11.1节“升级MySQL”

此处显示的表格提供了有关NDB集群升级和NDB 7.5不同版本之间降级兼容性的信息。有关NDB Cluster 7.5发行版系列中的升级和降级的更多说明,请参见下表。

升级和降级,NDB Cluster 7.5

图21.22 NDB集群升级和降级兼容性,MySQL NDB集群7.5

Image is titled "MySQL NDB Cluster 7.5" and includes rows with the values "7.5.8" on top and "7.5.1" at the bottom with every 7.5.x cluster release in-between. To the left are arrows pointing up and down. Under this section is an area titled "Key" that explains the up and down arrow as "Online upgrades and downgrades possible". The top value, "7.5.8" today, represents the latest release today but this text might not be updated.

版本支持。  升级到NDB Cluster 7.5(7.5.4和更高版本)的GA版本时,支持以下版本的NDB群集:

  • NDB集群7.4 GA版本(7.4.4及更高版本)

  • NDB群集7.3 GA版本(7.3.2和更高版本)

  • NDB Cluster 7.2 GA版本(7.2.4及更高版本)

已知问题 - NDB 7.5。  在升级到NDB 7.5版本或之间时,会发生以下问题:

  • 从NDB 7.5.2或7.5.3升级到更高版本时,将mysqld--initializeand --ndbcluster选项一起使用会导致后续运行mysql_upgrade时出现问题

    运行时--initialize,服务器不需要NDB支持; 已经 NDB在这个时候启用可能会导致问题ndbinfo的表。为了防止这种情况发生,--initialize现在这个选项会导致mysqld忽略该 --ndbcluster选项,如果后者也被指定的话。

    由于这些原因,升级失败的解决方法可以按如下方式完成:

    1. 执行整个群集的滚动重新启动

    2. 删除所有.frm的文件 data/ndbinfo目录

    3. 运行mysql_upgrade

    (错误#81689,错误#82724,错误#24521927,错误#23518923)

  • 在从NDB Cluster 7.3版本到NDB 7.4(或更高版本)版本的在线升级过程中,在本地检查点(LCP)期间以及在升级这些节点之前,运行较低版本的几个数据节点的故障导致了额外的节点故障在升级之后。这是由于EMPTY_LCP较旧节点作为LCP加重启动序列的一部分而启动协议元素滞留,并且由于在这些版本中实施了LCP优化,NDB 7.4和更高版本中不再使用该元素NDB 7.5.4修正了这个问题。(Bug#23129433)

  • 从NDB 7.5.2开始,该 ndb_binlog_index表使用 InnoDB存储引擎。MyISAM为了向后兼容,继续支持使用该表存储引擎。)

    将以前的发行版升级到NDB 7.5.2或更高版本时,可以将这些 选项与mysql_upgrade一起使用,以便表中执行--force --upgrade-system-tablesALTER TABLE ... ENGINE=INNODBndb_binlog_index

    有关更多信息,请参见 第21.6.4节“NDB群集复制架构和表”

  • 由于缺少用于测试版本之间升级兼容性的矩阵中的条目,因此无法从以前版本的NDB群集到NDB 7.5.1在线升级。(错误#22024947)

    同样在NDB 7.5.1中,如果数据库目录存在但是为空,则mysql_upgrade无法升级sys模式 sys(错误#81352,错误#23249846,错误#22875519)

已知问题 - NDB 7.6。  在升级到NDB 7.6版本之间或之间会发生以下问题:

磁盘数据文件格式的变化。  由于磁盘格式的变化,从这里列出的任一版本升级或降级需要每个数据节点的初始节点重启:

  • NDB 7.6.2

  • NDB 7.6.4

为避免与旧格式相关的问题,您应该在升级时重新创建任何现有的表空间并撤消日志文件组。您可以通过执行每个数据节点的初始重新启动(即使用该--initial选项)作为升级过程的一部分来执行此操作。

如果您正在使用磁盘数据表,则从任何 NDB 7.6版本降级 到任何NDB 7.5或更低版本要求您在重新启动所有数据节点时 --initial作为降级过程的一部分。这是因为NDB 7.5和更早版本系列无法读取新的磁盘数据文件格式。

重要

从早期版本升级到NDB 7.6.4或更高版本或从NDB 7.6.4或更高版本降级到早期版本需要清除然后重新创建NDB 数据节点文件系统,这意味着每个数据节点必须使用--initial 选项作为通常需要的滚动重启或系统重启的一部分。(在没有文件系统的情况下启动数据节点已经等同于初始重新启动;在这种情况下, --initial默认和不需要,这与以前版本的NDB群集相同。)

当作为升级到NDB 7.6.4或更高版本的一部分执行这样的重启时,检查任何现有的LCP文件是否存在LCP sysfile,表明现有的数据节点文件系统是使用NDB 7.6.4或更高版本编写的。如果此类节点文件系统存在但不包含该sysfile节点,并且没有该--initial 选项重新启动数据节点NDB则会导致重新启动失败,并显示相应的错误消息。

您还应该意识到,从NDB 7.6.4或更高版本降级到NDB 7.6.4之前的版本时,不可能有此类保护。

21.3配置NDB集群

作为NDB集群一部分的MySQL服务器与普通(非集群)MySQL服务器的主要区别在于它使用了NDB存储引擎。该引擎有时也被称为 NDBCLUSTER,尽管 NDB是优选的。

为避免不必要的资源分配,服务器在默认情况下配置为NDB 禁用存储引擎。要启用NDB,您必须修改服务器的my.cnf 配置文件,或使用该--ndbcluster选项启动服务器

此MySQL服务器是群集的一部分,因此它也必须知道如何访问管理节点以获取群集配置数据。默认行为是查找管理节点 localhost但是,如果您需要指定其位置在其他位置,则可以在 my.cnf或通过mysql 客户端完成。NDB可以使用存储引擎之前,至少有一个管理节点必须可操作,以及任何所需的数据节点。

有关特定于NDB集群的--ndbcluster其他 mysqld选项的更多信息 ,请参见 第21.3.3.9.1节“NDB集群的MySQL服务器选项”

您还可以使用NDB群集自动安装程序在一台或多台主机上使用基于浏览器的GUI设置和部署NDB群集。有关更多信息,请参见第21.2.1节“NDB群集自动安装程序”

有关安装NDB群集的一般信息,请参见 第21.2节“NDB群集安装”

21.3.1 NDB集群的快速测试设置

为了使您熟悉基本知识,我们将描述功能NDB群集的最简单可能的配置。在此之后,您应该能够根据本章其他相关部分提供的信息设计您所需的设置。

首先,您需要创建一个配置目录,例如 /var/lib/mysql-cluster通过以系统root用户身份执行以下命令

外壳> mkdir /var/lib/mysql-cluster

在此目录中,创建一个名为的文件 config.ini,其中包含以下信息。替代适当的值 HostName,并DataDir根据需要为您的系统。

#文件“config.ini” - 显示由1个数据节点组成的最小设置,
#1管理服务器和3台MySQL服务器。
#空的默认部分不是必需的,仅供显示
#为了完整性。
#数据节点必须提供一个主机名,但不需要MySQL服务器
#这样做。
#如果您不知道机器的主机名,请使用localhost。
#DataDir参数也有一个默认值,但建议使用
#明确地设置它。
#注意:[db],[api]和[mgm]是[ndbd],[mysqld]和[ndb_mgmd]的别名,
# 分别。[db]已弃用,不应在新安装中使用。

[ndbd默认]
NoOfReplicas = 1

[mysqld默认]
[ndb_mgmd默认值]
[tcp default]

[ndb_mgmd]
HostName = myhost.example.com

[NDBD]
HostName = myhost.example.com
DataDir = / var / lib / mysql-cluster

的[mysqld]
的[mysqld]
的[mysqld]

您现在可以启动ndb_mgmd管理服务器。默认情况下,它会尝试读取config.ini当前工作目录中文件,因此请将位置更改为文件所在的目录,然后调用ndb_mgmd

shell> cd /var/lib/mysql-cluster
shell>ndb_mgmd

然后通过运行ndbd启动单个数据节点

外壳> ndbd

对于启动ndbd时可以使用的命令行选项 ,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

默认情况下,ndbdlocalhost在端口1186上查找管理服务器

注意

如果您已经从二进制压缩包安装了MySQL,则需要明确指定ndb_mgmdndbd服务器的路径(通常情况下,这些会被发现/usr/local/mysql/bin。)

最后,将位置更改为MySQL数据目录(通常 /var/lib/mysql/usr/local/mysql/data),并确保该my.cnf文件包含启用NDB存储引擎所需的选项:

的[mysqld]
NDBCLUSTER

您现在可以照常启动MySQL服务器:

外壳> mysqld_safe --user=mysql &

稍等片刻以确保MySQL服务器正常运行。如果您看到通知mysql ended,请检查服务器的.err文件以了解出了什么问题。

如果到目前为止所有方法都进行得很顺利,您现在可以开始使用群集。连接到服务器并验证 NDBCLUSTER存储引擎已启用:

外壳> mysql
欢迎来到MySQL监视器。命令结束于; 或\ g。
你的MySQL连接ID是1到服务器版本:5.7.23

键入'help' 或'\ h'寻求帮助。输入'\ c'清除缓冲区。

MySQL的> SHOW ENGINES\G
...
*************************** 12. row ******************** *******
引擎:NDBCLUSTER
支持:是
评论:集群,容错,基于内存的表
*************************** 13. row ******************** *******
发动机:NDB
支持:是
评论:NDBCLUSTER的别名
...

前面的示例输出中显示的行号可能与系统中显示的行号不同,具体取决于您的服务器配置方式。

尝试创建一个NDBCLUSTER表格:

shell> mysql
mysql>USE test;
数据库改变

MySQL的> CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER;
查询OK,0行受影响(0.09秒)

MySQL的> SHOW CREATE TABLE ctest \G
*************************** 1. row ******************** *******
       表:ctest
创建表:CREATE TABLE`ctest`(
  `我`int(11)默认NULL
)ENGINE = ndbcluster DEFAULT CHARSET = latin1
一排(0.00秒)

要检查您的节点是否设置正确,请启动管理客户端:

外壳> ndb_mgm

使用管理客户端内SHOW命令获取有关集群状态的报告:

ndb_mgm> SHOW
群集配置
---------------------
[ndbd(NDB)] 1个节点
id = 2 @ 127.0.0.1(版本:5.7.22-ndb-7.5.11,节点组:0,*)

[ndb_mgmd(MGM)] 1个节点
id = 1 @ 127.0.0.1(版本:5.7.22-ndb-7.5.11)

[mysqld(API)] 3节点(s)
id = 3 @ 127.0.0.1(版本:5.7.22-ndb-7.5.11)
id = 4(未连接,接受来自任何主机的连接)
id = 5(未连接,接受来自任何主机的连接)

此时,您已成功建立了一个正在运行的NDB群集。您现在可以通过使用任何使用ENGINE=NDBCLUSTER其别名 创建的表来存储数据ENGINE=NDB

21.3.2 NDB群集配置参数,选项和变量概述

接下来的几节提供了在config.ini文件中使用的NDB集群节点配置参数摘要表, 以管理节点行为的各个方面,以及作为NDB集群进程运行时,mysqldmy.cnf文件或从命令行读取的选项和变量 每个节点参数表列出对于给定类型的参数(ndbdndb_mgmdmysqldcomputertcpshm,或 sci)。所有表格都包含参数,选项或变量的数据类型,以及适用的默认值,最小值和最大值。

重新启动节点时的注意事项。  对于节点参数,这些表还指示需要什么类型的重新启动(节点重新启动或系统重新启动) - 以及是否必须使用--initial- 更改给定配置参数的值来完成重新启动 在执行节点重启或初始节点重启时,必须依次重启所有集群的数据节点(也称为 滚动重启)。可以通过这种方式更新标记为node联机的群集配置参数 - 即不关闭群集。初始节点重启需要使用该选项重启每个ndbd进程--initial

系统重新启动需要完整关闭并重新启动整个群集。初始系统重新启动需要对群集进行备份,关闭后擦除群集文件系统,然后在重新启动后从备份进行恢复。

在任何群集重新启动时,必须重新启动群集的所有管理服务器,以便它们读取更新的配置参数值。

重要

通常可以增加数值聚类参数的值,而不会有任何问题,但建议渐进地这样做,以较小的增量进行这种调整。通过滚动重启,可以在线增加其中的许多功能。

但是,减少这些参数的值(无论是使用节点重启,节点初始重启,还是完全重启集群系统)不应轻微进行; 建议您只有经过仔细的规划和测试后才能这样做。这是对于那些与内存使用和磁盘空间参数,如尤其如此 MaxNoOfTablesMaxNoOfOrderedIndexes,和 MaxNoOfUniqueHashIndexes另外,通常情况下,可以通过简单的节点重启来提高与内存和磁盘使用有关的配置参数,但是它们需要降低初始节点重启。

由于其中一些参数可用于配置多个类型的群集节点,因此它们可能会出现在多个表中。

注意

4294967039通常在这些表格中显示为最大值。该值在NDBCLUSTER来源中 定义 MAX_INT_RNIL为等于0xFFFFFEFF等于 232 − 28 − 1

21.3.2.1 NDB群集数据节点配置参数

本节中的列表提供了有关用于配置NDB群集数据节点文件[ndbd][ndbd default]部分中 使用的参数的信息config.ini有关每个参数的详细说明和其他附加信息,请参见 第21.3.3.6节“定义NDB群集数据节点”

这些参数也适用于ndbmtd,即ndbd的多线程版本有关更多信息,请参见 第21.4.3节“ ndbmtd - NDB群集数据节点守护进程(多线程)”

  • Arbitration:如何执行仲裁来避免发生节点故障时的裂脑问题。

  • ArbitrationTimeout:最大时间(毫秒)数据库分区等待仲裁信号

  • BackupDataBufferSize:备份的databuffer的默认大小(以字节为单位)

  • BackupDataDir:存储备份的路径。请注意,字符串'/ BACKUP'总是附加到此设置,因此* effective *默认为FileSystemPath / BACKUP。

  • BackupDiskWriteSpeedPct:设置数据节点分配的最大写入速度(MaxDiskWriteSpeed)在启动abackup时为LCP预留的百分比。

  • BackupLogBufferSize:备份的日志缓冲区的默认大小(以字节为单位)

  • BackupMaxWriteSize:备份文件系统写入的最大大小(以字节为单位)

  • BackupMemory:分配给每个节点备份的总内存(以字节为单位)

  • BackupReportFrequency:备份期间备份状态报告的频率,以秒为单位

  • BackupWriteSize:备份文件系统写入的默认大小(以字节为单位)

  • BatchSizePerLocalScan:用于计算保持锁定扫描的锁定记录数

  • BuildIndexThreads:在系统或节点重新启动期间用于构建有序索引的线程数。运行ndb_restore --rebuild-indexes时也适用。将此参数设置为0将禁用构建有序索引的多线程。

  • CompressedBackup:使用zlib在写入备份时压缩备份

  • CompressedLCP:使用zlib写入压缩的LCP

  • ConnectCheckIntervalDelay:数据节点连接检查阶段之间的时间。数据节点在1个间隔后被认为是可疑的,并且在2个间隔后没有响应而死亡。

  • CrashOnCorruptedTuple:启用时,强制节点在检测到损坏的元组时关闭。

  • DataDir:此节点的数据目录

  • DataMemory:分配用于存储数据的每个数据节点上的字节数; 受制于可用的系统RAM和IndexMemory大小。

  • DefaultHashMapSize:设置用于表哈希映射的大小(桶)。支持三种值:0,240和3840.主要用于NDB 7.2.7+和NDB升级和降级; 在尝试使用之前请参阅文档。

  • DictTrace:启用DBDICT调试; 用于NDB开发

  • DiskIOThreadPool:用于文件访问的未绑定线程数(当前仅用于磁盘数据); 在MySQL簇NDB 6.4.3之前称为IOThreadPool。

  • Diskless:无需使用磁盘即可运行

  • DiskPageBufferEntries:在DiskPageBufferMemory中分配的32K页条目的数量。非常大的磁盘事务可能需要增加此值。

  • DiskPageBufferMemory:分配给磁盘页缓冲区高速缓存的每个数据节点上的字节数

  • DiskSyncSize:强制同步之前写入文件的数据量

  • ExecuteOnComputer:引用先前定义的COMPUTER的字符串

  • ExtraSendBufferMemory:除了由TotalSendBufferMemory或SendBufferMemory分配的内存之外,用于发送缓冲区的内存。默认(0)允许高达16MB。

  • FileSystemPath:数据节点存储其数据的目录的路径(目录必须存在)

  • FileSystemPathDataFiles:数据节点存储其磁盘数据文件的目录的路径。如果设置,默认值是FilesystemPathDD; 否则,如果已设置,则使用FilesystemPath; 否则,使用DataDir的值。

  • FileSystemPathDD:数据节点存储其磁盘数据和撤消文件的目录的路径。如果设置,默认值是FileSystemPath; 否则,使用DataDir的值。

  • FileSystemPathUndoFiles:数据节点存储其磁盘数据撤消文件的目录的路径。如果设置,默认值是FilesystemPathDD; 否则,如果已设置,则使用FilesystemPath; 否则,使用DataDir的值。

  • FragmentLogFileSize:每个重做日志文件的大小

  • HeartbeatIntervalDbApi:API节点 - 数据节点心跳之间的时间。(3次错过心跳后关闭API连接)

  • HeartbeatIntervalDbDb:数据节点到数据节点心跳之间的时间; 数据节点在3次错过心跳后认为已经死亡

  • HeartbeatOrder:设置数据节点检查彼此心跳的顺序,以确定给定节点是否仍处于活动状态并连接到群集。对于所有数据节点必须为零或对所有数据节点使用不同的非零值; 请参阅文档以获取进一步指导

  • HostName:此数据节点的主机名或IP地址。

  • IndexMemory:分配用于存储索引的每个数据节点上的字节数; 受制于可用的系统RAM和DataMemory大小。

  • IndexStatAutoCreate:创建索引时启用/禁用自动统计信息收集。

  • IndexStatAutoUpdate:监控更改的索引并触发自动统计更新

  • IndexStatSaveScale:用于确定存储的索引统计量大小的缩放因子。

  • IndexStatSaveSize:每个索引保存的统计数据的最大大小(字节)。

  • IndexStatTriggerPct:索引统计更新的DML操作阈值百分比更改。该值由IndexStatTriggerScale缩小。

  • IndexStatTriggerScale:对于大型索引,将IndexStatTriggerPct缩小此量,再乘以索引大小的基数2对数。设置为0可禁用缩放。

  • IndexStatUpdateDelay:给定索引的自动索引统计更新之间的最小延迟。0意味着没有延迟。

  • InitFragmentLogFiles:初始化片段日志文件(稀疏/满)

  • InitialLogFileGroup:描述在初始启动期间创建的日志文件组。请参阅格式文档。

  • InitialNoOfOpenFiles:每个数据节点打开的文件的初始数量。(每个文件创建一个线程)

  • InitialTablespace:描述在初始启动期间创建的表空间。请参阅格式文档。

  • LateAlloc:在建立与管理服务器的连接后分配内存。

  • LcpScanProgressTimeout:在关闭节点之前停止本地检查点碎片扫描的最大时间,以确保系统范围的LCP进度。使用0来禁用。

  • LockExecuteThreadToCPU:在NDB 6.3中,运行执行线程的CPU的ID; 在NDB 7.0和更高版本中,用逗号分隔的CPU ID列表

  • LockMaintThreadsToCPU:指示哪个CPU运行维护线程的CPU ID

  • LockPagesInMainMemory:以前:如果设置为true / 1,则NDB群集数据不会换出到磁盘。在MySQL 5.0.36 / 5.1.15和更高版本中:0 =禁用锁定,1 =内存分配后锁定,2 =内存分配前锁定

  • LogLevelCheckpoint:将本地和全局检查点信息的日志级别打印到stdout

  • LogLevelCongestion:将拥塞信息的级别输出到stdout

  • LogLevelConnection:打印到标准输出的节点连接/断开连接信息的级别

  • LogLevelError:Transporter,将心跳错误输出到stdout

  • LogLevelInfo:将心跳和日志信息打印到标准输出

  • LogLevelNodeRestart:节点重启级别和节点故障信息打印到标准输出

  • LogLevelShutdown:打印到标准输出的节点关闭信息级别

  • LogLevelStartup:打印到stdout的节点启动信息的级别

  • LogLevelStatistic:打印到标准输出的事务,操作和传输器信息的级别

  • LongMessageBuffer:内部长消息在每个数据节点上分配的字节数

  • MaxAllocate:为表分配内存时要使用的最大分配大小

  • MaxBufferedEpochs:订阅节点可以落后的允许编号的时代(未处理的时代)。超过将导致落后的用户断开连接。

  • MaxBufferedEpochBytes:分配给缓冲历元的总字节数。

  • MaxDiskWriteSpeed:当LCP无法重新启动时,可以通过LCP写入的最大每秒字节数和备份。

  • MaxDiskWriteSpeedOtherNodeRestart:LCP可以写入的最大每秒字节数,以及另一个节点重新启动时的备份字节数。

  • MaxDiskWriteSpeedOwnRestart:当该节点重新启动时,LCP可以写入的最大每秒字节数和备份。

  • MaxFKBuildBatchSize:用于构建外键的最大扫描批量大小。增加此值可能会加快外键的建立,但也会影响正在进行的流量。

  • MaxDMLOperationsPerTransaction:限制交易的大小; 如果它需要比这么多的DML操作更多的话就会中止事务。设置为0以禁用。

  • MaxLCPStartDelay:在将自己置于锁定队列中以并行恢复表数据之前,LCP轮询检查点互斥的时间(以允许其他数据节点完成元数据同步)。

  • MaxNoOfAttributes:建议存储在数据库中的属性总数(总和所有表)

  • MaxNoOfConcurrentIndexOperations:可以在一个数据节点上同时执行的索引操作的总数

  • MaxNoOfConcurrentOperations:事务协调器中的最大操作记录数

  • MaxNoOfConcurrentScans:在数据节点上同时执行的最大扫描数

  • MaxNoOfConcurrentSubOperations:最大并发订户操作数

  • MaxNoOfConcurrentTransactions:在此数据节点上并发执行的最大事务数,可同时执行的事务总数是此值乘以集群中数据节点的数量。

  • MaxNoOfFiredTriggers:在一个数据节点上可同时触发的触发器总数

  • MaxNoOfLocalOperations:在此数据节点上定义的最大操作记录数

  • MaxNoOfLocalScans:此数据节点上并行碎片扫描的最大数量

  • MaxNoOfOpenFiles:每个数据节点打开的最大文件数量(每个文件创建一个线程)

  • MaxNoOfOrderedIndexes:可以在系统中定义的有序索引的总数

  • MaxNoOfSavedMessages:要写入错误日志的最大错误消息数和要保留的最大跟踪文件数

  • MaxNoOfSubscribers:最大用户数量(默认0 =最大不可用表* 2)

  • MaxNoOfSubscriptions:订阅的最大数量(默认0 =最大无数据表)

  • MaxNoOfTables:建议存储在数据库中的NDB表的总数

  • MaxNoOfTriggers:可在系统中定义的触发器总数

  • MaxNoOfUniqueHashIndexes:可在系统中定义的唯一散列索引的总数

  • MaxParallelCopyInstances:节点重新启动期间的并行副本数。默认值为0,它使用两个节点上的LDM数量,最大值为16。

  • MaxParallelScansPerFragment:每个片段的最大并行扫描数量。一旦达到此限制,扫描将被序列化。

  • MaxReorgBuildBatchSize:用于重新组织表分区的最大扫描批处理大小。增加此值可能会加速表格分区重组,但也会影响正在进行的流量。

  • MaxStartFailRetries:启动时数据节点发生故障时的最大重试次数,要求StopOnError = 0.设置为0会导致启动尝试无限期地继续。

  • MaxUIBuildBatchSize:用于构建唯一键的最大扫描批次大小。增加此值可能会加速构建唯一密钥,但也会影响正在进行的流量。

  • MemReportFrequency:mem报告的频率,以秒为单位,0 =仅当通过%-limits时

  • MinDiskWriteSpeed:可由LCP和备份写入的最小每秒字节数。

  • MinFreePct:保留用于重新启动的内存资源的百分比。

  • NodeGroup:数据节点所属的节点组; 仅在集群初始启动时使用。

  • NodeId:唯一标识集群中所有节点之间的数据节点的编号。

  • NoOfFragmentLogFiles:属于数据节点的4个文件集中每个文件集中的16 MB重做日志文件的数量

  • NoOfReplicas:数据库中所有数据的副本数量; 建议值为2(默认值)。生产中不支持大于2的值。

  • Numa:(仅限Linux;需要libnuma)控制NUMA支持。设置为0允许系统确定数据节点进程使用交织; 1表示它由数据节点确定。

  • ODirect:尽可能使用O_DIRECT文件读写。

  • ODirectSyncFlag:O_DIRECT写入被视为同步写入; 当ODirect未启用时,InitFragmentLogFiles设置为SPARSE,或两者都忽略。

  • RealtimeScheduler:如果为true,则将数据节点线程调度为实时线程。默认为false。

  • RedoBuffer:分配用于写入重做日志的每个数据节点上的字节数

  • RedoOverCommitCounter:当RedoOverCommitLimit被多次超过时,事务将被中止,并且按照DefaultOperationRedoProblemAction指定的方式处理操作。

  • RedoOverCommitLimit:每次刷新当前重做缓冲区的时间都超过了这么多秒,发生这种情况的次数将与RedoOverCommitCounter进行比较。

  • RestartOnErrorInsert:控制插入错误引起的重启类型(当启用StopOnError时)

  • SchedulerExecutionTimer:发送前在调度程序中执行的微秒数

  • SchedulerResponsiveness:设置NDB调度器响应优化0-10; 值越高,响应时间越短,但吞吐量越低

  • SchedulerSpinTimer:睡眠前在调度程序中执行的微秒数

  • ServerPort:用于为来自API节点的传入连接设置传输器的端口

  • SharedGlobalMemory:分配给任何用途的每个数据节点上的总字节数

  • StartFailRetryDelay:重试前启动失败后的延迟(以秒为单位); 需要StopOnError = 0。

  • StartFailureTimeout:终止前等待的毫秒数。(0 =永远等待)

  • StartNoNodeGroupTimeout:尝试启动之前等待没有节点组的节点的时间(0 =永远)

  • StartPartialTimeout:试图在没有所有节点的情况下启动之前等待的毫秒数。(0 =永远等待)

  • StartPartitionedTimeout:尝试开始分区之前等待的毫秒数。(0 =永远等待)

  • StartupStatusReportFrequency:启动期间状态报告的频率

  • StopOnError:设置为0时,数据节点将自动重新启动并恢复以下节点故障

  • StringMemory:字符串存储器的默认大小(0至100 =最大值的百分比,101+ =实际字节数)

  • TcpBind_INADDR_ANY:绑定IP_ADDR_ANY,以便可以从任何地方进行连接(对于自动生成的连接)

  • TimeBetweenEpochs:时期之间的时间(用于复制的同步)

  • TimeBetweenEpochsTimeout:在两个时代之间超时。超过会导致节点关闭。

  • TimeBetweenGlobalCheckpoints:将事务组提交到磁盘之间的时间

  • TimeBetweenGlobalCheckpointsTimeout:将事务组提交到磁盘的最小超时

  • TimeBetweenInactiveTransactionAbortCheck:检查非活动事务之间的时间

  • TimeBetweenLocalCheckpoints:拍摄数据库快照之间的时间(以字节为底数2的对数表示)

  • TimeBetweenWatchDogCheck:数据节点内执行检查之间的时间

  • TimeBetweenWatchDogCheckInitial:数据节点内执行检查之间的时间(分配内存时的早期启动阶段)

  • TotalSendBufferMemory:用于所有传输器发送缓冲区的总内存。

  • TransactionBufferMemory:为每个数据节点分配的密钥和属性数据的动态缓冲区空间(以字节为单位)

  • TransactionDeadlockDetectionTimeout:时间事务可以花费在数据节点中执行。这是事务协调器等待参与事务的每个数据节点执行请求的时间。如果数据节点花费的时间超过这段时间,则事务将中止。在MySQL Cluster NDB 6.2.18 / 6.3.24 / 7.0.5之前,50和100之间的值是可能的,但被视为100。

  • TransactionInactiveTimeout:应用程序在执行另一部分事务之前等待的毫秒数。这是事务协调器等待应用程序执行或发送事务的另一部分(查询,语句)的时间。如果应用程序花费太多时间,则事务被中止。超时= 0意味着应用程序永远不会超时。

  • TwoPassInitialNodeRestartCopy:在初始节点重新启动期间以2遍的方式复制数据,从而使多线程构建有序索引以进行重新启动。

  • UndoDataBuffer:分配用于写入数据撤消日志的每个数据节点上的字节数

  • UndoIndexBuffer:分配用于写入索引撤销日志的每个数据节点上的字节数

以下参数特定于 ndbmtd

  • MaxNoOfExecutionThreads:仅限ndbmtd,指定执行线程的最大数量

  • NoOfFragmentLogParts:属于此数据节点的重做日志文件组的数量; 值必须是4的偶数。

  • ThreadConfig:用于配置多线程数据节点(ndbmtd)。默认是一个空字符串; 有关语法和其他信息,请参阅文档。

21.3.2.2 NDB集群管理节点配置参数

本节中的清单提供了有关用于配置NDB群集管理节点文件[ndb_mgmd][mgm]部分中 使用的参数的信息config.ini有关每个参数的详细说明和其他附加信息,请参见 第21.3.3.5节“定义NDB群集管理服务器”

  • ArbitrationDelay:当被要求仲裁时,仲裁员在投票前等待很长时间(毫秒)

  • ArbitrationRank:如果为0,则管理节点不是仲裁者。内核按顺序选择仲裁员1,2

  • DataDir:此节点的数据目录

  • ExecuteOnComputer:引用先前定义的COMPUTER的字符串

  • HeartbeatIntervalMgmdMgmd:管理节点到管理节点心跳之间的时间; 管理节点之间的连接在3次错过心跳后被认为丢失。

  • HeartbeatThreadPriority:设置管理节点的心跳线程策略和优先级; 请参阅允许值的手册

  • HostName:此管理节点的主机名或IP地址。

  • Id:标识管理节点(Id)的编号。现已弃用; 改用NodeId。

  • LogDestination:发送日志消息的位置:控制台,系统日志或指定的日志文件

  • NodeId:唯一标识集群中所有节点之间的管理节点的编号。

  • PortNumber:用于向管理服务器发送命令并从管理服务器获取配置的端口号

  • PortNumberStats:用于从管理服务器获取统计信息的端口号

  • TotalSendBufferMemory:用于所有传输器发送缓冲区的总内存

  • wan:默认使用WAN TCP设置

注意

在管理节点配置中进行更改后,需要执行群集的滚动重新启动以使新配置生效。有关更多信息请参见 第21.3.3.5节“定义NDB群集管理服务器”

要将新的管理服务器添加到正在运行的NDB群集中,还需要在修改任何现有config.ini 文件后执行所有群集节点的滚动重新启动有关使用多个管理节点时出现的问题的更多信息,请参见 第21.1.6.10节“与多个NDB群集节点相关的限制”

21.3.2.3 NDB集群SQL节点和API节点配置参数

本节中的清单提供了有关用于配置NDB集群SQL节点和API节点文件的各节[mysqld][api]各节中 使用的参数的信息config.ini有关每个参数的详细说明和其他附加信息,请参见 第21.3.3.7节“在NDB集群中定义SQL和其他API节点”

  • ApiVerbose:启用NDB API调试; 用于NDB开发

  • ArbitrationDelay:当被要求进行仲裁时,仲裁员在投票前等待几毫秒

  • ArbitrationRank:如果为0,则API节点不是仲裁者。内核按顺序选择仲裁员1,2

  • AutoReconnect:指定在与群集断开连接时,API节点是否应完全重新连接

  • BatchByteSize:以字节为单位的默认批量大小

  • BatchSize:以记录数量为单位的默认批量大小

  • ConnectBackoffMaxTime:指定以毫秒(〜100ms分辨率)为单位的最长时间,以允许此API节点尝试连接到任何给定数据节点。排除正在进行连接尝试的时间,最糟糕的情况可能需要几秒钟。如果没有数据节点当前连接到此API节点,则使用StartConnectBackoffMaxTime代替。

  • ConnectionMap:指定要连接的数据节点

  • DefaultHashMapSize:设置用于表哈希映射的大小(桶)。支持三种值:0,240和3840.主要用于NDB 7.2.7+和NDB升级和降级; 在尝试使用之前请参阅文档。

  • DefaultOperationRedoProblemAction:在超过RedoOverCommitCounter的情况下如何处理操作

  • EventLogBufferSize:数据节点内的NDB日志事件的循环缓冲区的大小。

  • ExecuteOnComputer:引用先前定义的COMPUTER的字符串

  • ExtraSendBufferMemory:除了由TotalSendBufferMemory或SendBufferMemory分配的内存之外,用于发送缓冲区的内存。默认(0)允许高达16MB。

  • HeartbeatThreadPriority:为API节点设置心跳线程策略和优先级; 请参阅允许值的手册

  • HostName:此SQL或API节点的主机名或IP地址。

  • Id:标识MySQL服务器或API节点的编号(Id)。现已弃用; 改用NodeId。

  • MaxScanBatchSize:一次扫描的最大集体批量大小

  • NodeId:唯一标识群集中所有节点中的SQL节点或API节点的编号。

  • StartConnectBackoffMaxTime:与ConnectBackoffMaxTime相同,只是如果没有数据节点连接到此API节点,则使用此参数。

  • TotalSendBufferMemory:用于所有传输器发送缓冲区的总内存

  • wan:默认使用WAN TCP设置

有关NDB集群的MySQL服务器选项的讨论,请参见 第21.3.3.9.1节“用于NDB集群的MySQL服务器选项”有关与NDB集群相关的MySQL服务器系统变量的信息,请参见第21.3.3.9.2节“NDB集群系统变量”

注意

要将新的SQL或API节点添加到正在运行的NDB群集的配置中,需要在向文件添加新[mysqld][api]之后执行所有节点的滚动重新启动config.ini(或者如果使用多个管理服务器,则需要文件) 。这必须在新的SQL或API节点可以连接到群集之前完成。

这是必要执行群集的任何重新启动,如果新的SQL或API节点可以使用以前未使用的API槽在群集配置以连接到群集。

21.3.2.4其他NDB群集配置参数

本节中的清单提供有关在使用的参数信息[computer][tcp][shm],和 [sci]一的部分 config.ini文件进行配置NDB集群。有关各个参数的详细说明和附加信息,请参见 第21.3.3.10节“NDB群集TCP / IP连接”第21.3.3.12节“NDB群集共享内存连接”第21.3.3.13节“SCI传输连接” NDB集群“

以下参数适用于 config.ini文件的 [computer]部分:

  • HostName:此计算机的主机名或IP地址。

  • Id:此计算机的唯一标识符。

以下参数适用于 config.ini文件的 [tcp]部分:

  • Checksum:如果启用校验和,则检查节点之间的所有信号是否有错误

  • Group:用于组接近; 较小的值被解释为更接近

  • NodeId1:连接一侧的节点(数据节点,API节点或管理节点)的ID

  • NodeId2:连接一侧的节点(数据节点,API节点或管理节点)的ID

  • NodeIdServer

  • OverloadLimit:如果发送缓冲区中有多个未发送的字节,则认为该连接过载。

  • PortNumber:用于该运输车的港口(弃权)

  • Proxy

  • ReceiveBufferMemory:该节点接收到的信号的缓冲区字节数

  • SendBufferMemory:从此节点发送的信号的缓冲区字节数

  • SendSignalId:在每个信号中发送ID。用于跟踪文件。在调试版本中默认为true。

  • TCP_MAXSEG_SIZE:用于TCP_MAXSEG的值

  • TCP_RCV_BUF_SIZE:用于SO_RCVBUF的值

  • TCP_SND_BUF_SIZE:用于SO_SNDBUF的值

  • TcpBind_INADDR_ANY:绑定InAddrAny而不是连接的服务器部分的主机名

以下参数适用于 config.ini文件的 [shm]部分:

  • Checksum:如果启用校验和,则检查节点之间的所有信号是否有错误

  • Group

  • NodeId1:连接一侧的节点(数据节点,API节点或管理节点)的ID

  • NodeId2:连接一侧的节点(数据节点,API节点或管理节点)的ID

  • NodeIdServer

  • OverloadLimit:如果发送缓冲区中有多个未发送的字节,则认为该连接过载。

  • PortNumber:用于该运输车的港口(弃权)

  • SendSignalId:在每个信号中发送ID。用于跟踪文件。

  • ShmKey:共享内存密钥

  • ShmSize:共享内存段的大小

  • Signum:用于信令的信号编号

以下参数适用于 config.ini文件的 [sci]部分:

  • Checksum:如果启用校验和,则检查节点之间的所有信号是否有错误

  • Group

  • Host1SciId0:主机1上适配器0的SCI节点ID(一台计算机可以有两个适配器)

  • Host1SciId1:主机1上适配器1的SCI节点ID(计算机可以有两个适配器)

  • Host2SciId0:主机2上适配器0的SCI节点ID(计算机可以有两个适配器)

  • Host2SciId1:主机2上适配器1的SCI节点ID(计算机可以有两个适配器)

  • NodeId1:连接一侧的节点(数据节点,API节点或管理节点)的ID

  • NodeId2:连接一侧的节点(数据节点,API节点或管理节点)的ID

  • NodeIdServer

  • OverloadLimit:如果发送缓冲区中有多个未发送的字节,则认为该连接过载。

  • PortNumber:用于该运输车的港口(弃权)

  • SendLimit:当缓冲该字节数时,发送传输器发送缓冲区内容

  • SendSignalId:在每个信号中发送ID。用于跟踪文件。

  • SharedBufferSize:共享内存段的大小

21.3.2.5 NDB集群mysqld选项和变量引用

下表提供了mysqld作为NDB群集中的SQL节点运行的命令行选项,服务器和状态变量的列表 有关显示所有 命令行选项,可用于mysqld的服务器和状态变量的表,请参见 第5.1.3节“服务器选项和变量引用”

21.3.3 NDB群集配置文件

配置NDB集群需要处理两个文件:

  • my.cnf:为所有NDB集群可执行文件指定选项。您以前使用MySQL应该熟悉的这个文件必须可以通过集群中运行的每个可执行文件访问。

  • config.ini:此文件(有时称为全局配置文件)仅由NDB群集管理服务器读取,NDB群集管理服务器随后将其中包含的信息分发给参与群集的所有进程。 config.ini包含集群中涉及的每个节点的描述。这包括数据节点的配置参数和集群中所有节点之间连接的配置参数。有关可以在此文件中出现的章节的快速参考,以及每个章节中可以放置什么类型的配置参数,请参阅 文件的章节config.ini

缓存配置数据。  NDB使用有状态的配置管理服务器每次重新启动管理服务器时都不读取全局配置文件,而是在第一次启动配置时缓存该配置,之后只有满足以下条件之一时才会读取全局配置文件:

  • 管理服务器使用--initial选项启动。  何时--initial使用时,将重新读取全局配置文件,删除所有现有缓存文件,并且管理服务器将创建新的配置缓存。

  • 管理服务器使用--reload选项启动。 --reload选项使管理服务器将其缓存与全局配置文件进行比较。如果它们不同,管理服务器将创建一个新的配置缓存; 任何现有的配置缓存都会保留,但不会被使用。如果管理服务器的缓存和全局配置文件包含相同的配置数据,则使用现有的缓存,并且不会创建新的缓存。

  • 管理服务器使用--config-cache = FALSE启动。  这会禁用 --config-cache(默认启用),并可用于强制管理服务器完全绕过配置缓存。在这种情况下,管理服务器将忽略可能存在的任何配置文件,而始终从config.ini文件中读取其配置数据

  • 没有找到配置缓存。  在这种情况下,管理服务器读取全局配置文件并创建一个包含与文件中相同的配置数据的缓存。

配置缓存文件。  管理服务器默认mysql-cluster在MySQL安装目录中指定的目录中创建配置缓存文件(如果您在Unix系统上从源代码创建NDB集群,则默认位置为 /usr/local/mysql-cluster。)通过使用该--configdir选项启动管理服务器,可以在运行时重写此路径 配置缓存文件是根据模式命名的二进制文件 ,其中是管理服务器在群集中的节点标识,并且 是缓存标识符。缓存文件按顺序使用编号 ndb_node_id_config.bin.seq_idnode_idseq_idseq_id,按照它们的创建顺序。管理服务器使用由确定的最新缓存文件seq_id

注意

可以通过删除以后的配置缓存文件或通过重命名较早的缓存文件使其更高来回滚到以前的配置 seq_id但是,由于配置缓存文件是以二进制格式写入的,因此您不应该尝试手动编辑其内容。

有关更多信息 --configdir--config-cache--initial,和 --reload为NDB集群管理服务器选项,请参见 第21.4.4,“ ndb_mgmd - NDB簇管理服务器守护程序”

我们正在不断改进群集配置并尝试简化此过程。虽然我们努力保持向后兼容性,但有时可能会引入不兼容的更改。在这种情况下,我们将尝试让Cluster用户事先知道更改是否不兼容。如果您发现有这样的变化,而且我们没有记录它,请使用第1.7节“如何报告错误或问题”中给出的说明,在MySQL错误数据库中报告它

21.3.3.1 NDB群集配置:基本示例

要支持NDB群集,您需要更新 my.cnf,如以下示例所示。调用可执行文件时,您也可以在命令行中指定这些参数。

注意

此处显示的选项不应与config.ini全局配置文件中使用的选项混淆全局配置选项将在本节后面讨论。

#my.cnf
#示例添加到my.cnf NDB群集
#(在MySQL 5.7中有效)

#启用ndbcluster存储引擎,并提供连接字符串
#管理服务器主机(默认端口为1186)
的[mysqld]
NDBCLUSTER
NDB-CONNECTSTRING = ndb_mgmd.mysql.com


#提供管理服务器主机的连接字符串(默认端口:1186)
[NDBD]
连接串= ndb_mgmd.mysql.com

#提供管理服务器主机的连接字符串(默认端口:1186)
[ndb_mgm]
连接串= ndb_mgmd.mysql.com

#提供集群配置文件的位置
[ndb_mgmd]
配置文件中=的/ etc / config.ini中

(有关连接字符串的更多信息,请参见 第21.3.3.3节“NDB群集连接字符串”。)

#my.cnf
#示例添加到my.cnf NDB群集
#(将适用于所有版本)

#启用ndbcluster存储引擎,并提供管理连接字符串
#服务器主机到默认端口1186
的[mysqld]
NDBCLUSTER
NDB-CONNECTSTRING = ndb_mgmd.mysql.com:1186
重要

一旦你开始的mysqld与过程NDBCLUSTERndb-connectstring参数在 [mysqld]my.cnf 文件如前所示,你不能执行 CREATE TABLE或者 ALTER TABLE不具有实际开始集群语句。否则,这些语句会失败并显示错误。这是设计

您也可以[mysql_cluster] 在群集my.cnf文件中使用单独的部分来读取和使用所有可执行文件的设置:

#特定于群集的设置
[mysql_cluster]
NDB-CONNECTSTRING = ndb_mgmd.mysql.com:1186

有关NDB可以在my.cnf文件中设置的其他变量,请参见 第21.3.3.9.2节“NDB群集系统变量”

NDB集群全局配置文件按照惯例命名 config.ini(但这不是必需的)。如果需要,它可以在启动时ndb_mgmd读取,并且可以放在任何可以被它读取的位置。配置的位置和名称使用指定 ndb_mgmd在命令行上。该选项没有默认值,如果ndb_mgmd使用配置缓存,则忽略该选项 --config-file=path_name

NDB集群的全局配置文件使用INI格式,该格式由段落标题(由方括号围绕)开头,后面跟着相应的参数名称和值组成。与标准INI格式的一个偏差是参数名称和值可以用冒号(:)和等号(=分隔开然而,等号是优选的。另一个偏差是部分不是由部分名称唯一标识的。相反,唯一部分(例如相同类型的两个不同节点)由在该部分内指定为参数的唯一ID标识。

默认值是为大多数参数定义的,也可以在中指定config.ini要创建默认值部分,只需将该单词添加 default到部分名称即可。例如, [ndbd]节包含适用于特定数据节点的[ndbd default]参数,而节包含适用于所有数据节点的参数。假设所有数据节点都应该使用相同的数据存储器大小。要配置它们全部,请创建一个[ndbd default]包含DataMemory一行部分 来指定数据存储器大小。

注意

在NDB集群的某些旧版本中,没有默认值 NoOfReplicas,因此必须在本[ndbd default]节中明确指定虽然此参数的默认值为2,这是最常见的使用场景中推荐的设置,但仍建议您明确设置此参数。

全局配置文件必须定义集群中涉及的计算机和节点以及这些节点所在的计算机。这里显示了一个由一个管理服务器,两个数据节点和两个MySQL服务器组成的简单配置文件示例:

#文件“config.ini” -  2个数据节点和2个SQL节点
#这个文件被放置在ndb_mgmd的启动目录中
#管理服务器)
#第一台MySQL服务器可以从任何主机启动。第二
#只能在主机mysqld_5.mysql.com上启动

[ndbd默认]
NoOfReplicas = 2
DataDir = / var / lib / mysql-cluster

[ndb_mgmd]
主机名= ndb_mgmd.mysql.com
DataDir = / var / lib / mysql-cluster

[NDBD]
HostName = ndbd_2.mysql.com

[NDBD]
HostName = ndbd_3.mysql.com

的[mysqld]
的[mysqld]
HostName = mysqld_5.mysql.com
注意

为了熟悉NDB集群,前面的示例旨在作为最小的启动配置,并且对于生产设置来说几乎可以肯定不足。请参见第21.3.3.2节“NDB群集的推荐启动配置”,它提供了一个更完整的示例启动配置。

每个节点在config.ini文件中都有自己的部分 例如,该群集有两个数据节点,因此前面的配置文件包含[ndbd]定义这些节点的两个部分。

注意

不要将注释放在与config.ini文件中的标题相同的行上; 这会导致管理服务器无法启动,因为在这种情况下无法分析配置文件。

config.ini文件的各个部分

您可以在config.ini配置文件中使用六个不同的部分 ,如以下列表中所述:

您可以default为每个部分定义值。除非在MySQL服务器my.cnfmy.ini文件中指定,否则NDB群集参数名称不区分大小写

21.3.3.2 NDB群集的建议启动配置

实现NDB集群的最佳性能取决于以下几个因素:

  • NDB集群软件版本

  • 数据节点和SQL节点的数量

  • 硬件

  • 操作系统

  • 要存储的数据量

  • 在其下运行集群的大小和类型

因此,获得最佳配置可能是一个迭代过程,其结果可能会随着每个NDB群集部署的具体情况而大不相同。在运行集群的平台或使用NDB集群数据的应用程序中进行更改时,也可能会指示配置更改。由于这些原因,不可能提供适用于所有使用场景的单一配置。但是,在本节中,我们提供了推荐的基本配置。

启动config.ini文件。  以下config.ini文件是配置运行NDB Cluster 7.5的群集的推荐起点:

#TCP参数

[tcp default]
SendBufferMemory= 2M
 ReceiveBufferMemory= 2M

#增加这两个缓冲区的大小超出默认值
#有助于防止由于磁盘I / O较慢而造成的瓶颈。

#管理节点参数

[ndb_mgmd默认值]
DataDir=path/to/management/server/data/directory

#可以为每个管理使用不同的数据目录
#服务器,但为了便于管理,最好是
#一致。

[ndb_mgmd]
HostName= management-server-A-hostnameNodeId=management-server-A-nodeid

[ndb_mgmd]
HostName= management-server-B-hostnameNodeId=management-server-B-nodeid

#使用2个管理服务器有助于保证始终有一个
仲裁员在网络分区的情况下,等等
#推荐用于高可用性。每个管理服务器必须是
#由HostName标识。您可能为了方便而指定
#任何管理服务器的NodeId,尽管一个将被分配
#为它自动; 如果你这样做,它必须在1-255范围内
#包含,并且在为群集指定的所有ID中必须是唯一的
#节点。

#数据节点参数

[ndbd默认]
NoOfReplicas= 2

#建议使用2个副本来保证数据的可用性;
#只使用1个副本不提供任何冗余,这意味着
#单个数据节点的故障导致整个群集
# 关掉。我们不推荐使用2个以上的副本,因为2是
#足以提供高可用性,而我们目前不进行测试
#此参数值更大。

LockPagesInMainMemory= 1

#在Linux和Solaris系统上,设置此参数会锁定数据节点
#进入内存。这样做可以防止它们交换到磁盘,
#这会严重降低集群性能。

DataMemory= 3072M
 IndexMemory= 384M

#为DataMemory和IndexMemory提供的值假定为4 GB RAM
#每个数据节点。但是,为了获得最佳效果,您应该先计算
#根据您实际计划的数据使用的内存
#商店(你可能会发现ndb_size.pl工具有助于估计
#this),然后允许额外的20%超过计算值。自然,
#你应该确保每个数据节点主机至少有这么多
#物理内存作为这两个值的总和。
ODirect= 1

#启用此参数会导致NDBCLUSTER尝试使用O_DIRECT
#写入本地检查点和重做日志; 这可以减轻负荷
#CPU。我们建议在运行的系统上使用NDB集群时这样做
#Linux内核2.6或更高版本。

NoOfFragmentLogFiles= 300
 DataDir= = 100000path/to/data/node/data/directory
MaxNoOfConcurrentOperations

SchedulerSpinTimer= 400
 SchedulerExecutionTimer= 100
RealTimeScheduler = 1
#设置这些参数可以让您利用实时调度
使用ndbd时NDB线程的数量可以提高吞吐量他们
#使用ndbmtd不需要 ; 特别是你不应该设置RealTimeScheduler用于ndbmtd数据节点。

TimeBetweenGlobalCheckpoints= 1000
 TimeBetweenEpochs= 200
 RedoBuffer= 32M
CompressedLCP= 1CompressedBackup= 1
#分别启用CompressedLCP和CompressedBackup原因
检查点文件和要压缩的备份文件,这可能会产生空间
比未压缩的LCP和备份节省高达50%。
MaxNoOfLocalScans= 64
 MaxNoOfTables= 1024
 MaxNoOfOrderedIndexes= 256

[NDBD]
HostName= data-node-A-hostnameNodeId=data-node-A-nodeid

LockExecuteThreadToCPU= 1
 LockMaintThreadsToCPU= 0
#在具有多个CPU的系统上,可以使用这些参数来锁定NDBCLUSTER
#线程到特定的CPU

[NDBD]
HostName= data-node-B-hostnameNodeId=data-node-B-nodeid

LockExecuteThreadToCPU= 1
 LockMaintThreadsToCPU= 0

#您必须为集群中的每个数据节点都有一个[ndbd]节;
#这些部分中的每一个都必须包含一个HostName。每个部分都可以
#为了方便可以选择包含NodeId,但在大多数情况下,它是
#足以允许群集动态分配节点ID。如果
#您确实指定了数据节点的节点ID,它必须在范围1中
#至48,并且在指定的所有ID中必须是唯一的
#群集节点。

#SQL NODE / API节点参数

的[mysqld]HostName= sql-node-A-hostnameNodeId=sql-node-A-nodeid

的[mysqld]

的[mysqld]

#每个连接到集群的API或SQL节点都需要一个[mysqld]
#或[api]部分。每个这样的部分定义一个连接 ; 你应该至少有这么多的部分
#config.ini文件作为API节点和SQL节点的总数
#你希望在任何时候连接到集群。
#没有性能或其他惩罚因为有额外的插槽可用
#你后来发现你想要或需要更多的API或SQL节点
#同时连接到群集。
#如果给定的[mysqld]或[api]部分没有指定HostName,
#那么任何 API或SQL节点都可以使用该插槽来连接到
#群集。您可能希望为一个连接槽使用明确的主机名
#以保证该主机的API或SQL节点始终可用
#连接到群集。如果你想阻止API或SQL节点
#从所需主机或主机以外连接,然后使用
config.ini文件中每个[mysqld]或[api]节的#HostName。
#如果你想为任何API或者定义一个节点ID(NodeId参数),你可以
#SQL节点,但这不是必需的; 如果你这样做,它必须在
#范围1到255,并且在指定的所有ID中必须是唯一的
#用于群集节点。

为SQL节点推荐my.cnf选项。  充当NDB集群的MySQL服务器SQL节点必须始终使用--ndbcluster--ndb-connectstring选项启动,无论是在命令行还是在my.cnf另外,为群集中的所有mysqld进程设置以下选项 ,除非您的设置需要其他方式:

  • --ndb-use-exact-count=0

  • --ndb-index-stat-enable=0

  • --ndb-force-send=1

  • --engine-condition-pushdown=1

21.3.3.3 NDB群集连接字符串

除NDB集群管理服务器(ndb_mgmd)外,属于NDB集群一部分的每个节点都需要一个指向管理服务器位置连接字符串此连接字符串用于建立到管理服务器的连接,以及根据节点在群集中的角色执行其他任务。连接字符串的语法如下所示:

[nodeid = node_id,] host-definition[,host-definition[,...]]

host-definitionhost_name[:port_number]

node_id是一个大于或等于1的整数,用于标识一个节点config.inihost_name是表示有效Internet主机名或IP地址的字符串。 port_number是一个引用TCP / IP端口号的整数。

例1(长):“nodeid = 2,myhost1:1100,myhost2:1100,198.51.100.3:1200”
例2(短):“myhost1”

localhost:1186如果没有提供,则用作默认连接字符串值。如果 port_num从连接字符串中省略,则默认端口为1186.该端口应始终在网络上可用,因为它已由IANA分配用于此目的(请参阅 http://www.iana.org/assignments/port-numbers了解详情)。

通过列出多个主机定义,可以指定多个冗余管理服务器。NDB群集数据或API节点尝试按指定的顺序联系每台主机上的连续管理服务器,直到建立成功的连接。

还可以在连接字符串中指定一个或多个绑定地址,以供具有多个网络接口的节点用于连接到管理服务器。绑定地址由主机名或网络地址和可选的端口号组成。连接字符串的增强语法如下所示:

[NODEID =node_id,]
    [bind-address = host-definition,]
     host-definition[; bind-address = host-definition]
     host-definition[; 绑定地址=host-definition ]
    [,...]]

host-definitionhost_name[:port_number]

如果在指定任何管理主机之前在连接字符串中使用单个绑定地址,则将此地址用作连接 到其中任何管理主机的默认地址(除非对给定的管理服务器进行了重写;有关示例,请参阅本节后面的内容) 。例如,以下连接字符串会导致节点使用, 198.51.100.242无论其连接的管理服务器如何:

bind-address = 198.51.100.242,poseidon:1186,perch:1186

如果指定了绑定地址下列一个管理主机定义,则它仅用于连接到该管理节点。考虑下面的连接字符串:

poseidon:1186; bind-address = localhost,perch:1186; bind-address = 198.51.100.242

在这种情况下,该节点用于localhost连接到在名为host的主机上运行的管理服务器, poseidon198.51.100.242连接到在名为host的主机上运行的管理服务器perch

您可以指定默认绑定地址,然后为一个或多个特定管理主机覆盖此默认值。在以下示例中,localhost用于连接到在主机上运行的管理服务器 poseidon; 由于 198.51.100.242是首先指定的(在任何管理服务器定义之前),因此它是默认的绑定地址,因此用于连接到主机上的管理服务器, perch并且orca

绑定地址= 198.51.100.242,波塞冬:1186;绑定地址=本地主机,鲈鱼:1186,ORCA:2200

有多种不同的方式来指定连接字符串:

  • 每个可执行文件都有自己的命令行选项,可以在启动时指定管理服务器。(请参阅相应可执行文件。)

  • 也可以通过将集群中的所有节点的连接字符串放置[mysql_cluster]在管理服务器my.cnf文件的一个部分中来设置连接字符串

  • 为了向后兼容,可以使用其他两个选项,使用相同的语法:

    1. 设置NDB_CONNECTSTRING环境变量以包含连接字符串。

    2. 将每个可执行文件的连接字符串写入一个名为text的文件中Ndb.cfg,并将该文件放入可执行文件的启动目录中。

    但是,这些现在已被弃用,不应用于新安装。

指定连接字符串的推荐方法是将其设置在命令行或 my.cnf每个可执行文件的文件中。

21.3.3.4在NDB集群中定义计算机

[computer]除了用作避免为系统中的每个节点定义主机名的需要之外,部分没有真正的意义。这里提到的所有参数是必需的。

  • Id

    表21.7该表提供了Id计算机配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 [没有]
    范围 ...
    重新启动类型 IS

    这是一个唯一的标识符,用于在配置文件的其他地方引用主机。

    重要

    计算机ID是相同的作为用于管理,API,或数据节点的节点ID。与使用节点ID的情况不同,您不能 NodeId文件的Id[computer] 部分中使用config.ini

  • HostName

    表21.8该表提供了HostName计算机配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称或IP地址
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    这是计算机的主机名或IP地址。

21.3.3.5定义NDB集群管理服务器

[ndb_mgmd]部分用于配置管理服务器的行为。如果采用多个管理服务器,则可以在一个[ndb_mgmd default]部分中指定所有这些服务器通用的参数[mgm]并且[mgm default] 这些是旧的别名,支持向后兼容性。

以下列表中的所有参数都是可选的,如果省略,则采用其默认值。

注意

如果既ExecuteOnComputer没有HostName参数也没有 参数,则默认值localhost将被假设为两者。

  • Id

    表21.9此表提供了Id管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 1 - 255
    重新启动类型 IS

    群集中的每个节点都有唯一的标识。对于管理节点,这由整数值表示,范围为1到255(含)。该ID由所有内部群集消息用于寻址节点,因此对于每个NDB群集节点必须是唯一的,而不管节点的类型如何。

    注意

    数据节点ID必须小于49.如果打算部署大量数据节点,最好将管理节点(和API节点)的节点ID限制为大于48的值。

    使用的Id识别管理节点参数赞成不赞成 NodeId尽管 Id仍然支持向后兼容性,但它现在会生成警告,并且可能会在将来版本的NDB群集中删除。

  • NodeId

    表21.10此表提供NodeId管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 1 - 255
    重新启动类型 IS

    群集中的每个节点都有唯一的标识。对于管理节点,这由整数值表示,范围介于1到255之间。该ID由所有内部群集消息用于寻址节点,因此对于每个NDB群集节点必须是唯一的,而不管节点的类型如何。

    注意

    数据节点ID必须小于49.如果打算部署大量数据节点,最好将管理节点(和API节点)的节点ID限制为大于48的值。

    NodeId是识别管理节点时使用的首选参数名称。尽管旧版本 Id继续支持向后兼容性,但现在已被弃用,并在使用时产生警告; 它也可能在未来的NDB Cluster发行版中被删除。

  • ExecuteOnComputer

    表21.11此表提供了ExecuteOnComputer管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称
    默认 [没有]
    范围 ...
    重新启动类型 小号

    这是指文件Id[computer]一部分中定义的一台计算机集合config.ini

    重要

    此参数自NDB 7.5.0起弃用,并且可能在未来版本中删除。改用该 HostName参数。

  • PortNumber

    表21.12该表提供了PortNumber管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 1186
    范围 0 - 64K
    重新启动类型 小号

    这是管理服务器侦听配置请求和管理命令的端口号。

  • HostName

    表21.13此表提供了HostName管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称或IP地址
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    指定此参数可定义管理节点要驻留的计算机的主机名。要指定除此localhost参数以外的主机名ExecuteOnComputer必需的主机名

  • LocationDomainId

    表21.14该表提供了LocationDomainId管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.6.4
    类型或单位 整数
    默认 0
    范围 0 - 16
    重新启动类型 小号

    将管理节点分配给云中的特定 可用性域(也称为可用性区域)。通过通知NDB哪些节点位于哪些可用性域中,可以通过以下方式在云环境中提高性能:

    • 如果在同一节点上未找到所请求的数据,则可以将读取指向同一可用性域中的另一个节点。

    • 不同可用性域中的节点之间的通信保证使用NDB 传输器的WAN支持,而无需任何进一步的手动干预。

    • 传输器的组号可以基于使用哪个可用性域,以便SQL和其他API节点尽可能与同一可用性域中的本地数据节点通信。

    • 可以从没有数据节点的可用性域中选择仲裁器,或者从第三个可用域中选择仲裁器,如果没有找到这样的可用性域。

    LocationDomainId取0和16之间的整数值,其中0是默认值; 使用0与保留参数未设置相同。

  • LogDestination

    表21.15此表提供LogDestination管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 {CONSOLE | SYSLOG | FILE}
    默认 [见文字]
    范围 ...
    重新启动类型 ñ

    此参数指定发送集群日志记录信息的位置。有三个选项在此顾及─ CONSOLESYSLOGFILE-with FILE 是默认值:

    • CONSOLE输出日志到 stdout

      安慰
      
    • SYSLOG日志发送到 syslog设施,可能的值是以下之一authauthprivcrondaemonftpkernlprmailnewssysloguseruucplocal0local1local2local3local4local5local6,或 local7

      注意

      并非每个工厂都必须支持每个操作系统。

      SYSLOG:设备=系统日志
      
    • FILE将群集日志输出管理到同一台机器上的常规文件。可以指定以下值:

      • filename:日志文件的名称。

        在这种情况下使用的默认日志文件名是 ndb_nodeid_cluster.log

      • maxsize:日志记录之前文件可以增长到的最大大小(以字节为单位)将转换为新文件。发生这种情况时,通过附加.N到文件名称来重命名旧日志文件 N下一个尚未与此名称一起使用的数字在哪里

      • maxfiles:日志文件的最大数量。

      FILE:文件名= cluster.log,MAXSIZE = 1000000,MAXFILES = 6
      

      FILE 参数 的默认值,其中是节点的ID。 FILE:filename=ndb_node_id_cluster.log,maxsize=1000000,maxfiles=6node_id

    可以使用分号指定多个日志目标,如下所示:

    CONSOLE; SYSLOG:设施= LOCAL0; FILE:文件名= /无功/日志/ mgmd
    
  • ArbitrationRank

    表21.16此表提供了ArbitrationRank管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 0-2
    默认 1
    范围 0 - 2
    重新启动类型 ñ

    该参数用于定义哪些节点可以充当仲裁员。只有管​​理节点和SQL节点可以是仲裁者。ArbitrationRank可以采取以下值之一:

    • 0:该节点永远不会被用作仲裁者。

    • 1:该节点具有高优先级; 也就是说,它将优先于低优先级节点的仲裁者。

    • 2:表示只有当具有较高优先级的节点不可用于此目的时才用作仲裁器的低优先级节点。

    通常,应将管理服务器配置为仲裁器,方法是将其设置ArbitrationRank 为1(管理节点的缺省值),将所有SQL节点的值设置为0(SQL节点的缺省值)。

    您可以通过ArbitrationRank在所有管理和SQL节点上将其设置为0,或通过全局配置文件Arbitration[ndbd default]部分中设置参数完全禁用仲裁 config.ini设置 Arbitration会导致ArbitrationRank忽略任何设置

  • ArbitrationDelay

    表21.17该表提供了ArbitrationDelay管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    导致管理服务器对仲裁请求的响应延迟了该毫秒数的整数值。默认情况下,此值为0; 通常不需要改变它。

  • DataDir

    表21.18此表提供了DataDir管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 路径
    默认
    范围 ...
    重新启动类型 ñ

    这指定了管理服务器输出文件的放置目录。这些文件包括集群日志文件,进程输出文件和守护进程的进程ID(PID)文件。(对于日志文件,可以通过设置FILE参数来覆盖此位置LogDestination 如本节前面所述)。

    此参数的默认值是ndb_mgmd所在的目录

  • PortNumberStats

    表21.19该表提供了PortNumberStats管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 0 - 64K
    重新启动类型 ñ

    此参数指定用于从NDB集群管理服务器获取统计信息的端口号。它没有默认值。

  • Wan

    表21.20此表提供了wan管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    默认使用WAN TCP设置。

  • HeartbeatThreadPriority

    表21.21该表提供了HeartbeatThreadPriority管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 [没有]
    范围 ...
    重新启动类型 小号

    为管理和API节点设置心跳线程的调度策略和优先级。

    此处显示设置此参数的语法:

    HeartbeatThreadPriority = policy[,priority]
    
    policy
      {FIFO | RR}
    

    设置此参数时,您必须指定一个策略。这是FIFO(先进先出)或 RR(循环赛)之一。策略值可以选择优先级(整数)。

  • TotalSendBufferMemory

    表21.22下表提供了TotalSendBufferMemory管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 0
    范围 256K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数用于确定在此节点上为所有已配置的传输器中的共享发送缓冲区内存分配的总内存量。

    如果设置了此参数,则其最小允许值为256KB; 0表示参数尚未设置。有关更多详细信息,请参见 第21.3.3.14节“配置NDB群集发送缓冲区参数”

  • HeartbeatIntervalMgmdMgmd

    表21.23此表提供了HeartbeatIntervalMgmdMgmd管理节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 1500
    范围 100 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    指定心跳消息之间的时间间隔,用于确定是否有其他管理节点正在与其联系。管理节点在这些间隔中的3个之后等待声明连接停止; 因此,默认设置为1500毫秒会导致管理节点在超时之前等待大约1600毫秒。

注意

在管理节点配置中进行更改后,需要执行群集的滚动重新启动以使新配置生效。

要将新管理服务器添加到正在运行的NDB群集,还需要在修改任何现有config.ini文件后执行所有群集节点的滚动重启 有关使用多个管理节点时出现的问题的更多信息,请参见 第21.1.6.10节“与多个NDB群集节点相关的限制”

21.3.3.6定义NDB集群数据节点

[ndbd][ndbd default]部分用于配置簇数据节点的行为。

[ndbd]并且[ndbd default] 无论您是使用ndbd还是ndbmtd二进制文件来处理数据节点进程都始终用作部分名称

有许多控制缓冲区大小,池大小,超时等的参数。唯一的强制性的参数是的任一个ExecuteOnComputerHostName; 这必须在本地[ndbd]部分中定义

该参数 NoOfReplicas应该在[ndbd default]部分中定义,因为它对所有群集数据节点都是通用的。这并不是严格需要设定的 NoOfReplicas,但明确设定是一个好习惯。

大部分数据节点参数都在该[ndbd default]部分中设置只有那些明确规定可以设置本地值的参数才允许在该[ndbd]部分中进行更改如果存在, HostNameNodeIdExecuteOnComputer 必须 在本地进行定义[ndbd]部分,而不是在其他任何部分config.ini换句话说,这些参数的设置是特定于一个数据节点的。

对于那些影响内存使用或缓冲区大小的参数,可以使用KMG作为后缀来表示1024,1024或1024×1024×1024的单位。(例如, 100K意味着100×1024 = 102400)。

参数名称和值不区分大小写,除非在MySQL服务器my.cnfmy.ini文件中使用,在这种情况下它们区分大小写。

有关NDB集群磁盘数据表特定配置参数的信息可以在本节后面找到(请参阅 磁盘数据配置参数)。

所有这些参数也适用于ndbmtdndbd的多线程版本)。另外三个数据节点配置参数MaxNoOfExecutionThreads- ThreadConfig,和 NoOfFragmentLogParts适用于ndbmtd ; 这些在与ndbd一起使用时不起作用有关更多信息,请参阅 多线程配置参数(ndbmtd)另请参见第21.4.3节“ ndbmtd - NDB集群数据节点守护进程(多线程)”

识别数据节点。 NodeIdId值(即,数据节点标识符)可以在命令行上,当启动节点在配置文件中进行分配。

  • NodeId

    表21.24该表提供了NodeId数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 1 - 48
    重新启动类型 IS

    唯一节点ID用作所有集群内部消息的节点地址。对于数据节点,这是一个范围在1到48之间的整数。群集中的每个节点都必须具有唯一的标识符。

    NodeId是识别数据节点时唯一支持的参数名称。Id在NDB 7.5.0中被删除。)

  • ExecuteOnComputer

    表21.25此表提供了ExecuteOnComputer数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称
    默认 [没有]
    范围 ...
    重新启动类型 小号

    这是指Id在一[computer] 节中定义的一台计算机集合

    重要

    此参数自NDB 7.5.0起弃用,并且可能在未来版本中删除。改用该 HostName参数。

  • HostName

    表21.26该表提供了HostName数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称或IP地址
    默认 本地主机
    范围 ...
    重新启动类型 ñ

    指定此参数可定义数据节点要驻留的计算机的主机名。要指定除此localhost参数以外的主机名ExecuteOnComputer必需的主机名

  • ServerPort

    表21.27该表提供了ServerPort数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 1 - 64K
    重新启动类型 小号

    群集中的每个节点都使用一个端口连接到其他节点。默认情况下,该端口是动态分配的,以确保同一主机上没有两个节点接收相同的端口号,因此通常不需要为此参数指定值。

    但是,如果您需要打开防火墙中的特定端口以允许数据节点和API节点(包括SQL节点)之间的通信,则可以将该参数设置为某个[ndbd]节中所需端口的数量, 或者(如果需要为多个数据节点执行此操作)文件[ndbd default]部分 config.ini,然后打开具有该编号的端口,以便从SQL节点,API节点或两者中传入连接。

    注意

    从数据节点到管理节点的连接使用ndb_mgmd管理端口(管理服务器 PortNumber)完成,因此始终允许从任何数据节点到该端口的传出连接。

  • TcpBind_INADDR_ANY

    将此参数设置为TRUE1绑定,IP_ADDR_ANY以便可以从任何地方进行连接(对于自动生成的连接)。默认是 FALSE0)。

  • NodeGroup

    表21.28该表提供了NodeGroup数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 [没有]
    范围 0 - 65536
    重新启动类型 IS

    该参数可用于将数据节点分配给特定的节点组。它仅在群集第一次启动时读取,不能用于在线将数据节点重新分配给其他节点组。通常不希望[ndbd default]config.ini文件部分 使用此参数,因此必须注意不要将节点分配给节点组,以便将无效数量的节点分配给任何节点组。

    NodeGroup 参数主要用于将新节点组添加到正在运行的NDB群集,而无需执行滚动重启。为此,您应该将其设置为65536(最大值)。您不需要NodeGroup为所有群集数据节点设置 值,仅适用于稍后要作为新节点组启动并添加到群集中的那些节点。有关更多信息,请参见 第21.5.14.3节“在线添加NDB群集数据节点:详细示例”

  • LocationDomainId

    表21.29该表提供了LocationDomainId数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.6.4
    类型或单位 整数
    默认 0
    范围 0 - 16
    重新启动类型 小号

    将数据节点分配到云中的特定 可用性域(也称为可用性区域)。通过通知NDB哪些节点位于哪些可用性域中,可以通过以下方式在云环境中提高性能:

    • 如果在同一节点上未找到所请求的数据,则可以将读取指向同一可用性域中的另一个节点。

    • 不同可用性域中的节点之间的通信保证使用NDB 传输器的WAN支持,而无需任何进一步的手动干预。

    • 传输器的组号可以基于使用哪个可用性域,以便SQL和其他API节点尽可能与同一可用性域中的本地数据节点通信。

    • 可以从没有数据节点的可用性域中选择仲裁器,或者从第三个可用域中选择仲裁器,如果没有找到这样的可用性域。

    LocationDomainId取0和16之间的整数值,其中0是默认值; 使用0与保留参数未设置相同。

  • NoOfReplicas

    表21.30该表提供NoOfReplicas数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 2
    范围 1 - 4
    重新启动类型 IS

    此全局参数只能在该[ndbd default]部分中设置,并为集群中存储的每个表定义副本数。该参数还指定节点组的大小。节点组是一组所有存储相同信息的节点。

    节点组是隐含形成的。第一个节点组由最低节点ID的数据节点集合,下一个最低节点标识集合构成的下一个节点组,以此类推。举例来说,假设我们有4个数据节点并且它NoOfReplicas 被设置为2.四个数据节点具有节点ID 2,3,4和5.然后,第一节点组由节点2和3形成,而第二节点组按节点4和节点组5排列。以相同节点组中的节点不放在同一台计算机上的方式配置集群很重要,因为单个硬件故障会导致整个集群发生故障。

    如果没有提供节点ID,则数据节点的顺序将成为节点组的决定因素。无论是否进行明确分配,都可以在管理客户端SHOW命令的输出中查看它们

    默认值为NoOfReplicas2. 这是大多数生产环境的推荐值

    重要

    虽然此参数的最大可能值为4,但生产中不支持设置 NoOfReplicas为大于2的值

    警告

    设置NoOfReplicas为1表示只有所有群集数据的一个副本; 在这种情况下,单个数据节点的丢失会导致群集失败,因为该节点不存在额外的数据副本。

    此参数的值必须均匀划分为群集中数据节点的数量。例如,如果有两个数据节点,则 NoOfReplicas必须等于1或2,因为2/3和2/4都会产生小数值; 如果有四个数据节点,则 NoOfReplicas必须等于1,2或4。

  • DataDir

    表21.31该表提供DataDir数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 路径
    默认
    范围 ...
    重新启动类型

    此参数指定放置跟踪文件,日志文件,pid文件和​​错误日志的目录。

    缺省值是数据节点进程工作目录。

  • FileSystemPath

    表21.32该表提供了FileSystemPath数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 路径
    默认 DATADIR
    范围 ...
    重新启动类型

    此参数指定为元数据创建的所有文件,REDO日志,UNDO日志(用于磁盘数据表)和数据文件的目录。默认值是由指定的目录DataDir

    注意

    该目录必须在ndbd进程启动之前存在

    NDB集群的建议目录层次结构包括 /var/lib/mysql-cluster创建节点文件系统的目录。该子目录的名称包含节点ID。例如,如果节点ID是2,则该子目录被命名 ndb_2_fs

  • BackupDataDir

    表21.33此表提供了BackupDataDir数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 路径
    默认 [见文字]
    范围 ...
    重新启动类型

    该参数指定备份放置的目录。

    重要

    字符串“ /BACKUP'始终附加到该值。例如,如果将值设置为 BackupDataDirto /var/lib/cluster-data,则所有备份都存储在下 /var/lib/cluster-data/BACKUP这也意味着有效的默认备份位置是BACKUPFileSystemPath 参数指定的位置下 命名的目录

数据存储器,索引存储器和字符串存储器

DataMemory并且 IndexMemory[ndbd]指定用于存储实际记录及其索引的内存段大小的参数。在设置这些值时,重要的是要了解如何使用 DataMemoryIndexMemory使用它们,因为它们通常需要更新以反映群集的实际使用情况。

注意

IndexMemory已在NDB 7.6中弃用,并可能在未来版本的NDB群集中删除。有关更多信息,请参阅以下说明。

  • DataMemory

    表21.34此表提供DataMemory数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 80M
    范围 1M - 1T
    重新启动类型 ñ
    版本(或更高版本) NDB 7.6.2
    类型或单位 字节
    默认 98M
    范围 1M - 1T
    重新启动类型 ñ

    该参数定义了可用于存储数据库记录的空间量(以字节为单位)。由该值指定的全部数量将分配到内存中,因此机器具有足够的物理内存以容纳它是非常重要的。

    分配的内存 DataMemory用于存储实际记录和索引。每条记录有16个字节的开销; 每个记录都会产生额外的金额,因为它存储在一个32KB的页面中,其页面开销为128字节(见下文)。由于每条记录仅存储在一个页面中,因此每页还有少量浪费。

    对于可变大小的表格属性,数据存储在单独的数据页面上,从中分配 DataMemory可变长度记录使用固定大小的部分,额外开销4字节来引用可变长度部分。可变大小的部分有2个字节的开销加上每个属性2个字节。

    最大记录大小是14000字节。

    在NDB 7.5(及更早版本)中,定义的内存空间 DataMemory也用于存储有序索引,每个记录约使用10个字节。每个表格行都在有序索引中表示。用户之间的一个常见错误是假定所有索引都存储在分配的内存中 IndexMemory,但情况并非如此:只有主键和唯一散列索引使用此内存; 有序索引使用分配的内存 DataMemory但是,除非您USING HASH在索引创建语句中指定,否则创建主键或唯一散列索引也会在相同键上创建有序索引 这可以通过运行来验证ndb_desc -ddb_name table_name

    在NDB 7.6中,分配给的资源 DataMemory用于存储 所有数据和索引; 任何内存配置为IndexMemory自动添加到用于 DataMemory形成公共资源池的内存

    目前,NDB集群可以为每个分区使用最大512 MB的散列索引,这意味着在某些情况下,即使在ndb_mgm -e“ALL REPORT MEMORYUSAGE”显示空闲 时,MySQL客户端应用程序中的可能也是完整的错误这也可能会导致数据节点在重负载数据的节点上重新启动。 DataMemory

    在NDB 7.5.4和以后,可以通过设置控制每个本地数据管理分区的数目为给定表NDB_TABLE选择 PARTITION_BALANCE的值中的一个 FOR_RA_BY_LDMFOR_RA_BY_LDM_X_2FOR_RA_BY_LDM_X_3,或 FOR_RA_BY_LDM_X_4,1,2,3,或每LDM 4个分区, (见 第13.1.18.10节“设置NDB_TABLE选项”)。

    注意

    在先前版本的NDB群集中,可以为NDB群集表创建额外的分区,因此可以通过使用MAX_ROWS选项为 散列索引提供更多的可用内存 CREATE TABLE虽然仍支持向后兼容性, MAX_ROWS但为此目的使用已从NDB 7.5.4开始弃用,您应该在其中使用NDB 7.5.4 PARTITION_BALANCE

    您也可以使用 MinFreePct 配置参数来帮助避免节点重新启动的问题。

    分配的内存空间 DataMemory由32KB页面组成,分配给表分段。通常将每个表分区为与群集中有数据节点相同数量的片段。因此,对于每个节点,都有与设置的相同数量的片段NoOfReplicas

    一旦页面被分配,目前不可能将其返回到空闲页面池,除非删除表格。(这也意味着 DataMemory分配给给定表的页面不能被其他表使用。)执行数据节点恢复还会压缩分区,因为所有记录都会插入到其他活动节点的空分区中。

    DataMemory 内存空间也包含UNDO信息:对于每一更新,未改变记录的副本将被分配 DataMemory还有对有序表索引中的每个副本的引用。唯一的哈希索引只有在更新唯一索引列时才会更新,在这种情况下,将插入索引表中的新条目,并在提交时删除旧条目。出于这个原因,还需要分配足够的内存来处理由使用集群的应用程序执行的最大事务。在任何情况下,执行一些大型事务都没有优势,因为使用许多较小的事务,原因如下:

    • 大型交易不会比小型交易更快

    • 大型交易会增加丢失的操作次数,并且在交易失败时必须重复

    • 大型交易使用更多的内存

    在NDB 7.5(及更早版本)中,缺省值为 DataMemory80MB; 从NDB 7.6.2开始,这是98MB。最小值是1MB。没有最大尺寸,但实际上必须调整最大尺寸,以便在达到限制时不会开始交换。此限制取决于计算机上可用的物理RAM量以及操作系统可能承诺的任何一个进程的内存量。每个进程的32位操作系统一般限制在2-4GB; 64位操作系统可以使用更多。对于大型数据库,出于这个原因,最好使用64位操作系统。

  • IndexMemory

    表21.35该表提供了IndexMemory数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 18M
    范围 1M - 1T
    重新启动类型 ñ
    版本(或更高版本) NDB 7.6.2
    类型或单位 字节
    默认 0
    范围 1M - 1T
    重新启动类型 ñ

    在NDB 7.5和更低版本中,此参数控制用于NDB群集中散列索引的存储量。散列索引始终用于主键索引,唯一索引和唯一约束。定义主键或唯一索引时,会创建两个索引,其中一个索引是用于所有元组访问以及锁定处理的散列索引。该索引也用于强制执行唯一约束。

    从NDB 7.6.2开始,该IndexMemory 参数将被弃用(并将来可能会被删除); 任何分配给的任何内存都IndexMemory被分配到相同的池中 DataMemory,它将单独负责在内存中存储数据和索引所需的所有资源。在NDB 7.6.2和更高版本中,IndexMemory群集配置文件中的使用会触发管理服务器的警告。

    您可以使用以下公式估算哈希索引的大小:

      size =((fragments* 32K)+(rows* 18))
              * replicas
    
              

    fragments是片段的数量,replicas是副本的数量(通常是2),并且 rows是行数。如果一个表有一百万行,8个片段和2个副本,则预期的索引内存使用情况按照以下所示进行计算:

              
      ((8 * 32K)+(1000000 * 18))* 2 =((8 * 32768)+(1000000 * 18))* 2
      =(262144 + 18000000)* 2
      = 18262144 * 2 = 36524288字节=〜35MB
    

    有序索引(启用时)的索引统计信息存储在 mysql.ndb_index_stat_sample表中。由于这个表有一个散列索引,这会增加索引内存使用量。给定有序索引的行数的上限可以计算如下:

      sample_size = key_size +((key_attributes + 1)* 4)
    
      sample_rows = IndexStatSaveSize
                    *((0.01 * IndexStatSaveScale* log 2(rows * sample_size))+ 1)
                    / sample_size
    

    在前面的公式中, key_size是有序索引键的大小(以字节key_attributes单位),有序索引键中 的ot属性 rows数,是基表中的行数。

    假设该表t1有一百万行和一个以ix1两个四字节整数命名的有序索引另外假设 IndexStatSaveSizeIndexStatSaveScale 设置为其默认值(分别为32K和100)。使用前面的2个公式,我们可以计算如下:

      sample_size = 8 +((1 + 2)* 4)= 20字节
    
      sample_rows = 32K
                    *((0.01 * 100 * log 2(1000000 * 20))+ 1)
                    / 20
                    = 32768 *((1 *〜16.811)+1)/ 20
                    = 32768 *〜17.811 / 20
                    =〜29182行
    

    期望的索引内存使用量因此是2 * 18 * 29182 =〜1050550字节。

    在NDB 7.6.2之前,缺省值为 IndexMemory18MB,最小值为1MB; 在NDB 7.6.2和更高版本中,此参数的最小值和默认值为0(零)。

  • StringMemory

    表21.36该表提供了StringMemory数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 %或字节
    默认 25
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 小号

    此参数确定为表格名称等字符串分配了多少内存,并且文件的一个[ndbd][ndbd default]一部分中 指定了该内存 config.ini介于0100包含之间的值 被解释为最大默认值的百分比,该值是根据许多因素(包括表的数量,最大表名大小,.FRM文件的 最大大小 MaxNoOfTriggers,最大列名称大小以及最大默认值列值。

    值大于100被解释为字节数。

    默认值是25,即默认最大值的25%。

    在大多数情况下,默认值应该是足够的,但是当您有很多 NDB表(1000或更多)时,可能会得到错误773 超出字符串内存,请修改StringMemory配置参数:永久错误:架构错误,在哪种情况下你应该增加这个值。25(25%)并不过分,并且应该防止这种错误在除了最极端的条件之外的所有情况下重复出现。

以下示例说明如何将内存用于表。考虑这个表格定义:

CREATE TABLE示例(
  INT NOT NULL,
  b INT NOT NULL,
  c INT NOT NULL,
  主键(a),
  UNIQUE(b)中
)ENGINE = NDBCLUSTER;

对于每条记录,有12个字节的数据加上12个字节的开销。没有可为空的列可节省4个字节的开销。此外,我们对列中的两个有序索引 ab消耗大约每记录10个字节。在基表上使用大约29个字节的主键哈希索引。独特的约束是通过一个单独的表格来实现的 b,主键和a列都是这样。该另一个表在example表中每个记录占用另外29个字节的索引存储器以及8个字节的记录数据加上12个字节的开销。

因此,对于一百万条记录,我们需要58MB索引内存来处理主键和唯一约束的散列索引。我们还需要64MB用于基表和唯一索引表的记录以及两个有序索引表。

你可以看到散列索引占用大量的内存空间; 然而,他们提供了非常快速的数据访问回报。它们也用于NDB集群来处理唯一性约束。

目前,唯一的分区算法是哈希和有序索引是每个节点本地的。因此,在一般情况下,有序索引不能用于处理唯一性约束。

两个重要的一点 IndexMemoryDataMemory是总数据库大小为所有数据存储器和用于在每个节点组中的所有索引存储器的总和。每个节点组用于存储复制信息,因此如果有四个节点和两个副本,则会有两个节点组。因此,DataMemory对于每个数据节点,可用的总数据存储器是2×

强烈建议 DataMemoryIndexMemory为所有节点设置相同的值。数据分布甚至可以在集群中的所有节点上进行,因此任何节点可用的最大空间量不能大于集群中最小节点的可用空间量。

DataMemoryIndexMemory可以改变,但减少这些可能是有风险的; 这样做很容易导致节点甚至整个NDB集群由于内存空间不足而无法重新启动。增加这些值应该是可以接受的,但建议以与软件升级相同的方式执行这种升级,从更新配置文件开始,然后重新启动管理服务器,然后依次重新启动每个数据节点。

MinFreePct。  数据节点资源的比例(默认为5%)包括 DataMemoryIndexMemory保留以确保数据节点在执行重新启动时不耗尽其内存。这可以使用MinFreePct数据节点配置参数(默认5)进行调整

表21.37该表提供了MinFreePct数据节点配置参数的类型和值信息

属性
版本(或更高版本) NDB 7.5.0
类型或单位 无符号
默认
范围 0 - 100
重新启动类型 ñ

更新不会增加使用的索引内存量。插入立即生效; 然而,在事务提交之前,行实际上并未被删除。

交易参数。 [ndbd]我们讨论 的接下来的几个参数非常重要,因为它们会影响并行事务的数量和系统可以处理的事务的大小。 MaxNoOfConcurrentTransactions 设置节点中可能的并行事务的数量。 MaxNoOfConcurrentOperations 设置可以处于更新阶段或同时锁定的记录数。

这两个参数(尤其是 MaxNoOfConcurrentOperations)都可能是用户设置特定值并且不使用默认值的目标。默认值是为使用小事务的系统设置的,以确保它们不会使用过多的内存。

MaxDMLOperationsPerTransaction 设置可在给定事务中执行的DML操作的最大数量。

  • MaxNoOfConcurrentTransactions

    表21.38该表提供了MaxNoOfConcurrentTransactions数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 4096
    范围 32 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    每个集群数据节点都需要集群中每个活动事务的事务记录。协调事务的任务分配给所有的数据节点。群集中的事务记录总数是任何给定节点中事务的数量乘以群集中节点的数量。

    事务记录被分配给各个MySQL服务器。与MySQL服务器的每个连接都至少需要一个事务记录,并且每个表需要连接一个额外的事务对象。这意味着群集中交易总数的合理最小值可以表示为

    TotalNoOfConcurrentTransactions =
        (在任何单个交易中访问的表的最大数量+ 1)
        * SQL节点的数量
    

    假设有10个使用该集群的SQL节点。涉及10个表的单个连接需要11个事务记录; 如果在一个交易中有10个这样的连接,那么这个事务需要10 * 11 = 110个事务记录,每个MySQL服务器或总共110 * 10 = 1100个事务记录。每个数据节点都可以处理TotalNoOfConcurrentTransactions /数据节点的数量。对于具有4个数据节点的NDB群集,这意味着设置 MaxNoOfConcurrentTransactions在每个数据节点上1100/4 = 275.此外,您应该通过确保单个节点组可以容纳所有并发事务来提供故障恢复; 换句话说,每个数据节点的MaxNoOfConcurrentTransactions足以涵盖大量等于TotalNoOfConcurrentTransactions /节点组数量的事务。如果此群集有单个节点组, MaxNoOfConcurrentTransactions则应设置为1100(与整个群集的并发事务总数相同)。

    另外,每笔交易至少涉及一项业务; 出于这个原因,设置的值 MaxNoOfConcurrentTransactions应该总是不超过的值 MaxNoOfConcurrentOperations

    此参数必须设置为所有群集数据节点的相同值。这是由于以下事实:当数据节点发生故障时,最老的幸存节点重新创建故障节点中正在进行的所有事务的事务状态。

    可以使用滚动重新启动来更改此值,但群集上的流量必须保证在发生这种情况时不会发生比新旧更低级别更低的事务。

    默认值是4096。

  • MaxNoOfConcurrentOperations

    表21.39此表提供了MaxNoOfConcurrentOperations数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 32K
    范围 32 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    根据事务的大小和数量调整此参数的值是一个好主意。在执行只涉及少数操作和记录的事务时,此参数的默认值通常就足够了。执行涉及许多记录的大型交易通常需要您增加其价值。

    在事务协调器和执行实际更新的节点中为每个事务更新集群数据保留记录。这些记录包含查找用于回滚,锁定队列和其他目的的UNDO记录所需的状态信息。

    该参数应该设置为最小值,以便在事务中同时更新的记录数除以集群数据节点的数量。例如,在具有四个数据节点并且预计可以使用事务处理一百万个并发更新的集群中,您应该将此值设置为1000000/4 = 250000.为了帮助提供故障恢复能力,建议您设置此值参数设置为一个足够高的值,以允许单个数据节点处理其节点组的负载。换句话说,你应该设置值等于total number of concurrent operations / number of node groups(在有单个节点组的情况下,这与整个集群的并发操作总数相同。)

    由于每个交易总是涉及至少一个操作,因此值 MaxNoOfConcurrentOperations应始终大于或等于值 MaxNoOfConcurrentTransactions

    阅读设置锁定的查询也会导致创建操作记录。在单个节点内分配一些额外的空间,以适应分布在节点上不完美的情况。

    当查询使用唯一的散列索引时,实际上在事务中每个记录使用两个操作记录。第一条记录表示索引表中的读取,第二条记录处理基表上的操作。

    默认值是32768。

    该参数实际上处理了可以单独配置的两个值。其中第一个指定了事务协调器要放置多少个操作记录。第二部分指定了多少操作记录在数据库中是本地的。

    在八节点集群上执行的非常大的事务需要事务协调器中的操作记录数量与事务中涉及的读取,更新和删除数量相同。但是,这些操作记录遍布所有八个节点。因此,如果有必要为一个非常大的事务配置系统,分开配置这两个部分是一个好主意。 MaxNoOfConcurrentOperations 将始终用于计算节点的事务协调器部分中的操作记录数。

    了解操作记录的内存需求也很重要。这些消耗大约每个记录1KB。

  • MaxNoOfLocalOperations

    表21.40该表提供了MaxNoOfLocalOperations数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 未定义
    范围 32 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    默认情况下,该参数计算为1.1× MaxNoOfConcurrentOperations这适合与许多同时交易的系统,其中没有一个是非常大的。如果需要一次处理一个非常大的事务并且有很多节点,那么通过明确指定此参数来覆盖默认值是个不错的主意。

  • MaxDMLOperationsPerTransaction

    表21.41该表提供了MaxDMLOperationsPerTransaction数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 操作(DML)
    默认 4294967295
    范围 32 - 4294967295
    重新启动类型 ñ

    该参数限制事务的大小。如果事务需要比这么多的DML操作更多的话,事务将被中止。每笔交易的最小操作数为32; 但是,您可以将其设置 MaxDMLOperationsPerTransaction为0,以禁止对每个事务的DML操作数量进行任何限制。最大值(和默认值)是4294967295。

交易临时存储。  下一组[ndbd]参数用于在执行作为集群事务一部分的语句时确定临时存储。当语句完成并且集群正在等待提交或回滚时,所有​​记录都会被释放。

这些参数的默认值适用于大多数情况。但是,需要支持涉及大量行或操作的事务的用户可能需要增加这些值,以便在系统中实现更好的并行性,而应用程序需要相对较小事务的用户可以减少值以节省内存。

  • MaxNoOfConcurrentIndexOperations

    表21.42该表提供了MaxNoOfConcurrentIndexOperations数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 8K
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    对于使用唯一散列索引的查询,在查询的执行阶段使用另一个临时操作记录集。该参数设置该记录池的大小。因此,只有在执行查询的一部分时才分配此记录。该部分一旦执行,该记录即被释放。需要处理中止和提交的状态由正常操作记录处理,其中池大小由参数设置 MaxNoOfConcurrentOperations

    此参数的默认值为8192.只有在使用唯一散列索引的极高并行度的罕见情况下,才需要增加此值。如果DBA确信群集不需要高度的并行性,则可以使用较小的值并节省内存。

  • MaxNoOfFiredTriggers

    表21.43该表提供了MaxNoOfFiredTriggers数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 4000
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    默认值 MaxNoOfFiredTriggers 是4000,这对大多数情况来说已经足够了。在某些情况下,如果DBA认为群集中并行性的需求不高,甚至可能会减少。

    执行影响唯一散列索引的操作时会创建一条记录。在具有唯一散列索引的表中插入或删除记录或更新属于唯一散列索引一部分的列会触发索引表中的插入或删除操作。结果记录用于表示此索引表操作,同时等待启动它完成的原始操作。此操作是短暂的,但对于包含一组唯一散列索引的基表执行许多并行写操作的情况,仍可能需要其池中有大量记录。

  • TransactionBufferMemory

    表21.44此表提供了TransactionBufferMemory数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 1M
    范围 1K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    受此参数影响的内存用于更新索引表和读取唯一索引时触发的跟踪操作。该内存用于存储这些操作的密钥和列信息。这个参数的值很少需要从默认值改变。

    默认值为 TransactionBufferMemory 1MB。

    正常的读写操作使用类似的缓冲区,其使用更短暂。编译时参数 ZATTRBUF_FILESIZE(found in ndb/src/kernel/blocks/Dbtc/Dbtc.hpp)设置为4000×128字节(500KB)。关键信息的类似缓冲区ZDATABUF_FILESIZE(也在Dbtc.hpp)中包含4000×16 = 62.5KB的缓冲区空间。Dbtc是处理事务协调的模块。

扫描和缓冲。 模块中 有其他[ndbd]参数Dblqh(in ndb/src/kernel/blocks/Dblqh/Dblqh.hpp)会影响读取和更新。这些包括 ZATTRINBUF_FILESIZE,默认设置为10000×128字节(1250KB) ZDATABUF_FILE_SIZE,默认设置为10000×16字节(约156KB)的缓冲区空间。迄今为止,还没有用户的任何报告,也没有从我们自己的广泛测试得出的任何结果,表明这些编译时间限制应该增加。

  • BatchSizePerLocalScan

    表21.45该表提供了BatchSizePerLocalScan数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 256
    范围 1 - 992
    重新启动类型 ñ

    该参数用于计算用于处理并发扫描操作的锁定记录数。

    BatchSizePerLocalScanBatchSize与SQL节点中定义的连接有很强的联系

  • LongMessageBuffer

    表21.46该表提供了LongMessageBuffer数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 64M
    范围 512K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    这是用于在单个节点内和节点之间传递消息的内部缓冲区。默认值是64MB。

    此参数很少需要从默认值更改。

  • MaxFKBuildBatchSize

    表21.47该表提供了MaxFKBuildBatchSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.6.4
    类型或单位 整数
    默认 64
    范围 16 - 512
    重新启动类型 小号

    用于构建外键的最大扫描批次大小。增加为该参数设置的值可能会加速构建外键构建,但会对正在进行的流量产生更大的影响。

    在NDB 7.6.4中添加

  • MaxNoOfConcurrentScans

    表21.48该表提供了MaxNoOfConcurrentScans数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 256
    范围 2 - 500
    重新启动类型 ñ

    此参数用于控制可在群集中执行的并行扫描的数量。每个事务协调器可以处理为此参数定义的并行扫描数量。每个扫描查询通过并行扫描所有分区来执行。每个分区扫描使用分区所在节点中的扫描记录,记录数是此参数的值乘以节点数。群集应该能够MaxNoOfConcurrentScans 从群集中的所有节点同时进行 扫描。

    扫描实际上在两种情况下执行。当没有散列或有序索引存在来处理查询时,会发生第一种情况,在这种情况下,通过执行全表扫描来执行查询。遇到没有散列索引来支持查询但遇到有序索引时遇到第二种情况。使用有序索引意味着执行并行范围扫描。订单仅保留在本地分区上,因此有必要在所有分区上执行索引扫描。

    默认值 MaxNoOfConcurrentScans 是256.最大值是500。

  • MaxNoOfLocalScans

    表21.49此表提供了MaxNoOfLocalScans数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 [见文字]
    范围 32 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    如果许多扫描未完全并行化,则指定本地扫描记录的数量。当没有提供本地扫描记录的数量时,计算如下所示:

    4 * MaxNoOfConcurrentScans* [#data nodes] + 2
    

    最小值是32。

  • MaxParallelCopyInstances

    表21.50此表提供了MaxParallelCopyInstances数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 64
    重新启动类型 小号

    此参数设置在节点重新启动或系统重新启动的复制阶段中使用的并行化,此时通过复制从最新节点的任何已更改记录复制当前刚刚启动的节点与已具有当前数据的节点同步。因为在这种情况下的完全并行会导致过载情况,所以 MaxParallelCopyInstances提供一种方法来减少它。此参数的默认值为0.此值表示有效并行性等于刚刚启动的节点中的LDM实例数以及节点更新它的数量。

  • MaxParallelScansPerFragment

    表21.51此表提供了MaxParallelScansPerFragment数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 256
    范围 1 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    在串行处理开始排队之前, 可以配置允许的最大并行扫描次数(TUP扫描和 TUX扫描)。在并行执行大量扫描并提高性能时,可以增加此功能以利用任何未使用的CPU。

    该参数的默认值是256。

  • MaxReorgBuildBatchSize

    表21.52该表提供了MaxReorgBuildBatchSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.6.4
    类型或单位 整数
    默认 64
    范围 16 - 512
    重新启动类型 小号

    用于重新组织表分区的最大扫描批处理大小。增加为该参数设置的值可能会加快重组速度,但会对正在进行的流量产生更大的影响。

    在NDB 7.6.4中添加

  • MaxUIBuildBatchSize

    表21.53下表提供了MaxUIBuildBatchSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.6.4
    类型或单位 整数
    默认 64
    范围 16 - 512
    重新启动类型 小号

    用于构建唯一密钥的最大扫描批次大小。增加为此参数设置的值可能会加速此构建,但会对正在进行的流量产生更大的影响。

    在NDB 7.6.4中添加

内存分配

MaxAllocate

表21.54此表提供了MaxAllocate数据节点配置参数的类型和值信息

属性
版本(或更高版本) NDB 7.5.0
类型或单位 无符号
默认 32M
范围 1M - 1G
重新启动类型 ñ

这是为表分配内存时要使用的内存单元的最大大小。在情况下, NDB给出了内存不足的错误,但它通过检查群集日志或输出是显而易见的DUMP 1000所有可用内存还未被使用,可以增加这个参数的值(或 MaxNoOfTables,或两者),使NDB使足够的内存可用。

哈希映射大小

DefaultHashMapSize

表21.55该表提供了DefaultHashMapSize数据节点配置参数的类型和值信息

属性
版本(或更高版本) NDB 7.5.0
类型或单位 LDM线程
默认 3840
范围 0 - 3840
重新启动类型 ñ

使用的表哈希映射的大小 NDB可以使用此参数进行配置。DefaultHashMapSize可以采取三种可能的值中的任何一种(0,240,3840)。下表描述了这些值及其影响:

表21.56 DefaultHashMapSize参数

描述/效果
0 使用集群中所有数据节点和API节点中此参数的最小值集(如果有); 如果它未在任何数据或API节点上设置,请使用默认值。
240 原始哈希映射大小(在NDB 7.2.7之前的所有NDB集群版本中默认使用)
3840 更大的哈希映射大小(默认情况下,从NDB 7.2.7开始使用)

此参数的原始用途是为了便于升级,特别是降级到具有不同默认散列映射大小的非常旧的发行版以及从中发布。从NDB群集7.4升级到NDB群集7.5时,这不是问题。

记录和检查点。  以下[ndbd]参数控制日志和检查点行为。

  • FragmentLogFileSize

    表21.57该表提供了FragmentLogFileSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 16M
    范围 4M - 1G
    重新启动类型

    通过设置此参数,您可以直接控制重做日志文件的大小。这在NDB群集在高负载下运行并且在尝试打开新日志文件之前无法足够快地关闭碎片日志文件(一次只能打开两个碎片日志文件)时很有用; 增加分段日志文件的大小使得集群在打开每个新分段日志文件之前有更多时间。该参数的默认值是16M。

    有关片段日志文件的更多信息,请参阅说明 NoOfFragmentLogFiles

  • InitialNoOfOpenFiles

    表21.58该表提供了InitialNoOfOpenFiles数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 27
    范围 20 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数设置分配给打开文件的内部线程的初始数量。

    默认值是27。

  • InitFragmentLogFiles

    表21.59该表提供了InitFragmentLogFiles数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 [看价值]
    默认
    范围 SPARSE,FULL
    重新启动类型

    默认情况下,在执行数据节点的初始启动时会创建片段日志文件,即,根据所用的操作系统和文件系统,并非所有字节都必须写入磁盘。但是,可以通过此参数覆盖此行为并强制写入所有字节,而不管所用的平台和文件系统类型如何。 InitFragmentLogFiles 取两个值中的任意一个:

    • SPARSE碎片日志文件被创建为稀疏。这是默认值。

    • FULL强制将片段日志文件的所有字节写入磁盘。

    根据您的操作系统和文件系统,设置 InitFragmentLogFiles=FULL可能有助于消除写入REDO日志时的I / O错误。

  • EnablePartialLcp

    true,让部分本地检查点:这意味着每个LCP仅记录完整的数据库的一部分,再加上含有自上次LCP改变行的任何记录; 如果没有行更改,则LCP仅更新LCP控制文件并且不更新任何数据文件。

    如果EnablePartialLcp禁用(false),则每个LCP只使用一个文件并写入完整的检查点; 这需要LCP的磁盘空间最少,但会增加每个LCP的写入负载。默认值是enabled(true)。partiaL LCPS使用的空间比例可以通过RecoveryWork 配置参数的设置进行修改

  • LcpScanProgressTimeout

    表21.60此表提供了LcpScanProgressTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 第二
    默认 60
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    本地检查点片段扫描监视程序定期检查作为本地检查点的一部分执行的每个片段扫描没有进度,并且如果在给定的时间量过去后没有进展,则关闭节点。可以使用LcpScanProgressTimeout 数据节点配置参数来设置此间隔 ,该参数设置在LCP片段扫描看守程序关闭节点之前可以停止本地检查点的最长时间。

    默认值是60秒(提供与先前版本的兼容性)。将此参数设置为0会完全禁用LCP片段扫描看门狗。

  • MaxNoOfOpenFiles

    表21.61下表提供了MaxNoOfOpenFiles数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 20 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数为要分配给打开文件的内部线程数设置最大值。任何需要更改此参数的情况都应报告为错误

    默认值为0.但是,此参数可以设置的最小值是20。

  • MaxNoOfSavedMessages

    表21.62该表提供了MaxNoOfSavedMessages数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 25
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    该参数设置错误日志中写入的错误的最大数量以及在覆盖现有数据之前保留的最大跟踪文件数量。无论何种原因,节点崩溃时都会生成跟踪文件。

    默认值是25,它将这些最大值设置为25个错误消息和25个跟踪文件。

  • MaxLCPStartDelay

    表21.63下表提供了MaxLCPStartDelay数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 0
    范围 0 - 600
    重新启动类型 ñ

    在并行数据节点恢复中,只有表数据实际上被并行复制和同步; 诸如字典和检查点信息的元数据的同步以串行方式完成。另外,字典和检查点信息的恢复不能与执行本地检查点并行执行。这意味着,在同时启动或重新启动许多数据节点时,数据节点可能会在执行本地检查点时被迫等待,这会导致更长的节点恢复时间。

    可以强制延迟本地检查点以允许更多(也可能是所有)数据节点完成元数据同步; 一旦每个数据节点的元数据同步完成,即使在执行本地检查点时,所有数据节点也可以并行恢复表数据。强制这样的延迟,设置 MaxLCPStartDelay,它决定了当数据节点继续同步元数据时,集群可以等待开始本地检查点的秒数。该参数应[ndbd default]config.ini文件部分中 设置 ,以便所有数据节点都相同。最大值是600; 默认值是0。

  • NoOfFragmentLogFiles

    表21.64该表提供了NoOfFragmentLogFiles数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 16
    范围 3 - 4294967039(0xFFFFFEFF)
    重新启动类型

    此参数设置节点的REDO日志文件数量,从而设置分配给REDO日志记录的空间量。由于REDO日志文件是组织在一个环中的,因此设置中的第一个和最后一个日志文件(有时分别称为headtail日志文件)不符合要求非常重要。当这些节点彼此靠近时,由于缺少新日志记录的空间,节点将开始中止所有包含更新的事务。

    一个REDO日志记录不会被删除,直到两个要求各地检查站已完成自认为插入日志记录。点校验频率由本章其他部分讨论的自己的一组配置参数决定。

    默认参数值为16,默认情况下表示16组4个16MB文件,总共1024MB。单个日志文件的大小可以使用FragmentLogFileSize 参数进行配置 在需要大量更新的场景中,NoOfFragmentLogFiles 可能需要将值 设置为300或甚至更高,以便为REDO日志提供足够的空间。

    如果检查点设置速度慢,并且数据库写入过多,以至于日志文件已满并且在不危及恢复的情况下无法切割日志尾部,则会使用内部错误代码410(Out of log file space temporarily中止所有更新事务这种情况一直存在,直到检查点完成并且可以向前移动日志尾部。

    重要

    该参数不能在即时 ”中更改; 您必须使用重新启动节点 --initial如果您希望为正在运行的集群中的所有数据节点更改此值,则可以使用滚动节点重新启动(--initial在启动每个数据节点时使用 )来完成此操作。

  • RecoveryWork

    此参数仅在“ EnablePartialLcp真”时有效,即仅在部分本地检查点处于启用状态时才有效。较高的值意味着:

    • 为每个LCP编写的记录更少,LCP使用更多空间

    • 重新启动时需要更多的工作

    RecoveryWork意味着 较低的值

    • 在每个LCP期间写入更多记录,但LCP在磁盘上占用更少的空间。

    • 重启过程中工作量减少,因此重启速度加快,但是在正常运行期间需要付出更多的工作

元数据对象。  下一组[ndbd]参数定义元数据对象的池大小,用于定义索引,事件和群集间复制使用的属性,表,索引和触发器对象的最大数量。

注意

这些仅仅作为群集的建议,任何未指定的都会恢复为显示的默认值。

  • MaxNoOfAttributes

    表21.65该表提供了MaxNoOfAttributes数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 1000
    范围 32 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数设置可在集群中定义的建议最大属性数量; MaxNoOfTables,它并不打算作为一个硬性的上限。

    (在较早的NDB集群版本中,此参数有时被视为某些操作的硬限制,这导致了与NDB集群复制有关的问题,当可以创建比可复制更多的表时,并且有时在可能时导致混淆[或者不可能,取决于具体情况]创造更多MaxNoOfAttributes属性。)

    默认值为1000,最小可能值为32.最大值为4294967039.由于所有元数据都完全在服务器上复制,因此每个属性消耗每个节点大约200个字节的存储空间。

    在设定时 MaxNoOfAttributes,事先准备好ALTER TABLE将来可能需要执行的任何 说明。这是因为,在ALTER TABLECluster表上执行期间,使用了原表中3倍的属性数量,并且一个很好的做法是允许将此数量加倍。例如,如果具有属性的最大数量(NDB簇表greatest_number_of_attributes)具有100点的属性,良好的起点的值 MaxNoOfAttributes 将是6 * greatest_number_of_attributes = 600

    您还应该估算每个表的属性的平均数量并将其乘以 MaxNoOfTables如果此值大于上一段中获得的值,则应改为使用较大的值。

    假设您可以毫无问题地创建所有需要的表格,您还应该ALTER TABLE在配置参数后通过尝试实际来验证此数字是否足够如果不成功,请再增加 MaxNoOfAttributes一个倍数 MaxNoOfTables并再次测试。

  • MaxNoOfTables

    表21.66该表提供了MaxNoOfTables数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 128
    范围 8 - 20320
    重新启动类型 ñ

    为每个表和簇中的每个唯一散列索引分配一个表对象。该参数为整个集群设置建议的最大表格对象数量; MaxNoOfAttributes,它并不打算作为一个硬性的上限。

    (在较早的NDB集群版本中,此参数有时被视为某些操作的硬限制,这导致了与NDB集群复制有关的问题,当可以创建比可复制更多的表时,并且有时在可能时导致混淆[或者根据具体情况,不可能创造更多MaxNoOfTables表格。)

    对于每个具有BLOB数据类型的属性, 都会使用一个额外的表来存储大部分 BLOB数据。定义表格总数时还必须考虑这些表格。

    此参数的默认值为128.最小值为8,最大值为20320.每个表对象每个节点消耗约20KB。

    注意

    的总和 MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes 不得超过(4294967294)。 232 − 2

  • MaxNoOfOrderedIndexes

    表21.67下表提供了MaxNoOfOrderedIndexes数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 128
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    对于群集中的每个有序索引,将分配一个对象,用于描述正在索引的内容及其存储段。默认情况下,如此定义的每个索引也定义一个有序索引。每个唯一索引和主键都有一个有序索引和一个哈希索引。 MaxNoOfOrderedIndexes 设置可以在任何时间在系统中使用的有序索引的总数。

    此参数的默认值为128.每个索引对象每个节点消耗约10KB的数据。

    注意

    的总和 MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes 不得超过(4294967294)。 232 − 2

  • MaxNoOfUniqueHashIndexes

    表21.68该表提供了MaxNoOfUniqueHashIndexes数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 64
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    对于不是主键的每个唯一索引,将分配一个特殊表,将唯一键映射到索引表的主键。默认情况下,还为每个唯一索引定义了一个有序索引。为了防止这种情况,您必须USING HASH在定义唯一索引时指定选项。

    缺省值是64.每个索引每个节点消耗约15KB。

    注意

    的总和 MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes 不得超过(4294967294)。 232 − 2

  • MaxNoOfTriggers

    表21.69该表提供了MaxNoOfTriggers数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 768
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    内部更新,插入和删除触发器分配给每个唯一的散列索引。(这意味着为每个唯一的散列索引创建三个触发器。)但是, 有序索引只需要一个触发器对象。备份还为群集中的每个普通表使用三个触发器对象。

    集群之间的复制也使用内部触发器。

    该参数设置群集中触发器对象的最大数量。

    默认值是768。

  • MaxNoOfSubscriptions

    表21.70此表提供了MaxNoOfSubscriptions数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    NDBNDB群集中的 每个表都需要在NDB内核中进行预订。对于某些NDB API应用程序,可能需要或希望更改此参数。但是,对于充当SQL节点的MySQL服务器的正常使用,不需要这样做。

    默认值为 MaxNoOfSubscriptions 0,将其视为等于 MaxNoOfTables每个订阅消耗108个字节。

  • MaxNoOfSubscribers

    表21.71该表提供了MaxNoOfSubscribers数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    仅当使用NDB群集复制时,此参数才有意义。默认值为0,将其视为 2 * MaxNoOfTables; 也就是说,NDB对于两台MySQL服务器(一台充当复制主服务器,另一台充当从服务器),每个都有一个订阅每个用户使用16个字节的内存。

    当使用循环复制,多主复制以及涉及多于2个MySQL服务器的其他复制设置时,应该将此参数增加到复制中包含mysqld进程的数量 (这通常但不总是与数量相同集群)。例如,如果您有一个使用三个NDB集群的循环复制设置,并且每个集群都连接一个 mysqld,并且每个这些mysqld进程都充当主服务器和从服务器,则应设置为 MaxNoOfSubscribers 等于3 * MaxNoOfTables

    有关更多信息,请参见 第21.6节“NDB群集复制”

  • MaxNoOfConcurrentSubOperations

    表21.72该表提供了MaxNoOfConcurrentSubOperations数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 256
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数为集群中的所有API节点一次执行的操作数量设置上限。缺省值(256)对于正常操作已足够,并且可能需要仅在有许多API节点同时执行大量操作的情况下进行调整。

布尔参数。  数据节点的行为也受到一组[ndbd]采用布尔值参数的影响 这些参数可以分别指定为 TRUE等于 1或者Y,并且 FALSE通过将它们设置为等于 0N

  • LateAlloc

    表21.73该表提供了LateAlloc数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 1
    范围 0 - 1
    重新启动类型 ñ

    与管理服务器建立连接后,为该数据节点分配内存。默认启用。

  • LockPagesInMainMemory

    表21.74该表提供了LockPagesInMainMemory数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 0
    范围 0 - 2
    重新启动类型 ñ

    对于许多操作系统(包括Solaris和Linux),可以将进程锁定到内存中,并避免任何交换到磁盘。这可以用来帮助保证群集的实时特性。

    该参数采用其中一个整数值 012,其作用如下列表所示:

    • 0:禁用锁定。这是默认值。

    • 1:为进程分配内存后执行锁定。

    • 2:在分配进程的内存之前执行锁定。

    如果操作系统未配置为允许非特权用户锁定页面,则使用此参数的数据节点进程可能必须以系统根目录运行。LockPagesInMainMemory 使用该mlockall函数,从Linux内核2.6.9开始,非特权用户可以将内存锁定为受限制max locked memory。有关更多信息,请参阅ulimit -lhttp://linux.die.net/man/2/mlock)。

    注意

    在较早的NDB群集版本中,此参数为布尔值。0或者false 是默认设置,并禁用锁定。 1true在分配内存后启用对进程的锁定。NDB簇7.5治疗truefalse此参数为错误的值。

    重要

    glibc2.10 开始glibc使用每线程竞技场来减少共享池上的锁争用,这会消耗实际内存。一般来说,数据节点进程不需要每线程场所,因为它在启动后不会执行任何内存分配。(这种分配器的差异似乎不会显着影响性能。)

    glibc行为旨在通过MALLOC_ARENA_MAX 环境变量进行配置,但在glibc2.16 之前的此机制中的错误 意味着此变量不能设置为小于8,以致无法回收浪费的内存。(错误#15907219; 有关此问题的更多信息,另请参阅 http://sourceware.org/bugzilla/show_bug.cgi?id=13137)。

    解决此问题的一种可能的解决方法是使用 LD_PRELOAD环境变量来预加载jemalloc内存分配库以取代随附内存分配库 glibc

  • StopOnError

    表21.75此表提供了StopOnError数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认 1
    范围 0,1
    重新启动类型 ñ

    此参数指定数据节点进程是否应该退出或遇到错误情况时执行自动重新启动。

    该参数的默认值是1; 这意味着,默认情况下,错误会导致数据节点进程停止。

    遇到错误并且 StopOnError为0时,数据节点进程将重新启动。

    在NDB Cluster 7.5.5之前,如果数据节点进程以不受控制的方式退出(例如,由于在执行查询或执行查询时对数据节点进程执行 kill -9),并且StopOnError设置为0,天使进程尝试以与之前启动的方式完全相同的方式重启它 - 也就是说,使用上次启动节点时使用的相同启动选项。因此,如果数据节点进程最初是使用该--initial 选项启动的,那么它也会重新启动 --initial这意味着,在这种情况下,如果在非常短的时间间隔内发生了足够数量的数据节点故障,则效果与您执行整个群集的初始重新启动相同,从而导致所有数据丢失。NDB Cluster 7.5.5及更高版本的NDB 7.5版本(Bug#83510,Bug#24945638)解决了此问题。

    MySQL Cluster Manager的用户应该注意,当 StopOnError等于1时,这会阻止MySQL Cluster Manager代理在执行自己的重新启动和恢复后重新启动任何数据节点。有关更多信息,请参阅 在Linux上启动和停止代理

  • CrashOnCorruptedTuple

    表21.76该表提供了CrashOnCorruptedTuple数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认 真正
    范围 真假
    重新启动类型 小号

    当此参数被启用时,它会强制数据节点在遇到损坏的元组时关闭。在NDB 7.5中,默认情况下启用。

  • Diskless

    表21.77该表提供了无盘数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 true | false(1 | 0)
    默认
    范围 真假
    重新启动类型 IS

    可以将NDB簇表指定为 无盘,这意味着表不检查磁盘并且不发生日志记录。这种表格只存在于主存中。使用无盘表的结果是,这些表中的表和记录都不会在崩溃中幸存下来。但是,在无盘模式下运行时,可以在无盘计算机上运行 ndbd

    重要

    此功能会导致整个 群集以无盘模式运行。

    启用此功能后,群集联机备份将被禁用。另外,集群的部分启动是不可能的。

    Diskless 在默认情况下被禁用。

  • ODirect

    表21.78该表提供ODirect数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    启用此参数会导致 NDB尝试O_DIRECT对LCP,备份和重做日志使用 写入操作,通常会降低kswapd和CPU使用率。在Linux上使用NDB群集时,ODirect如果使用的是2.6或更高版本的内核,请启用

    ODirect 在默认情况下被禁用。

  • ODirectSyncFlag

    表21.79此表提供ODirectSyncFlag数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.6.4
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    启用此参数时,会执行重做日志写入,以便每次完成的文件系统写入都将作为呼叫处理fsync如果满足以下至少一个条件,则忽略该参数的设置:

    • ODirect 未启用。

    • InitFragmentLogFiles 设置为SPARSE

    默认情况下禁用。

  • RestartOnErrorInsert

    表21.80此表提供了RestartOnErrorInsert数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 错误代码
    默认 2
    范围 0 - 4
    重新启动类型 ñ

    只有在构建调试版本时才能访问此功能,因为在测试过程中可能会在执行各个代码块时插入错误。

    该功能默认为禁用。

  • CompressedBackup

    表21.81该表提供了CompressedBackup数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    启用此参数会导致备份文件被压缩。使用的压缩等同于 gzip --fast,并且可以节省数据节点上所需空间的50%或更多空间来存储未压缩的备份文件。可以为单个数据节点或所有数据节点启用压缩备份(通过[ndbd default]config.ini文件部分中设置此参数)。

    重要

    您无法将压缩备份恢复到运行不支持此功能的MySQL版本的群集。

    默认值是0(禁用)。

  • CompressedLCP

    表21.82下表提供了CompressedLCP数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    设置此参数可以1使本地检查点文件得到压缩。使用的压缩等同于gzip --fast,并且可以节省数据节点上所需空间的50%或更多空间来存储未压缩的检查点文件。可以为单个数据节点或所有数据节点启用压缩的LCP(通过[ndbd default]config.ini文件部分中 设置此参数)。

    重要

    您无法将压缩的本地检查点恢复到运行不支持此功能的MySQL版本的群集。

    默认值是0(禁用)。

控制超时,间隔和磁盘寻呼

有许多[ndbd]参数指定群集数据节点中各种操作之间的超时和间隔。大多数超时值以毫秒为单位指定。在适用的情况下,会提到任何例外情况。

  • TimeBetweenWatchDogCheck

    表21.83该表提供了TimeBetweenWatchDogCheck数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 6000
    范围 70 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    为了防止主线程在某个时刻陷入无限循环,看门狗线程检查主线程。该参数指定检查之间的毫秒数。如果在三次检查后进程保持相同状态,则看门狗线程终止它。

    为了进行实验或适应当地条件,可以轻松更改此参数。它可以在每个节点的基础上指定,虽然似乎没有什么理由这么做。

    默认的超时时间是6000毫秒(6秒)。

  • TimeBetweenWatchDogCheckInitial

    表21.84该表提供了TimeBetweenWatchDogCheckInitial数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 6000
    范围 70 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    这与TimeBetweenWatchDogCheck 参数类似 ,只是 TimeBetweenWatchDogCheckInitial 控制在分配内存的早期启动阶段中存储节点内执行检查之间传递的时间量。

    默认的超时时间是6000毫秒(6秒)。

  • StartPartialTimeout

    表21.85该表提供了StartPartialTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 30000
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数指定在调用集群初始化例程之前,集群等待所有数据节点出现的时间。此超时用于尽可能避免部分集群启动。

    执行群集的初始启动或初始重新启动时,此参数将被覆盖。

    默认值是30000毫秒(30秒)。0会禁用超时,在这种情况下,集群可能只有在所有节点都可用时才会启动。

  • StartPartitionedTimeout

    表21.86该表提供了StartPartitionedTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 60000
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    如果群集已准备好在等待StartPartialTimeout 几毫秒后启动, 但仍可能处于分区状态,则群集将等待,直到超时已过。如果 StartPartitionedTimeout 设置为0,则集群将无限期地等待。

    执行群集的初始启动或初始重新启动时,此参数将被覆盖。

    默认的超时时间是60000毫秒(60秒)。

  • StartFailureTimeout

    表21.87下表提供了StartFailureTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    如果数据节点在该参数指定的时间内尚未完成启动序列,则节点启动失败。将此参数设置为0(默认值)表示不应用数据节点超时。

    对于非零值,此参数以毫秒为单位进行测量。对于包含大量数据的数据节点,应该增加此参数。例如,如果数据节点包含数千兆字节的数据,则执行节点重新启动可能需要10-15分钟(即600000到1000000毫秒)的时间。

  • StartNoNodeGroupTimeout

    表21.88该表提供了StartNoNodeGroupTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 15000
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    当配置数据节点时 Nodegroup = 65536,被视为未被分配给任何节点组。完成后,群集等待 StartNoNodegroupTimeout毫秒,然后将这些节点视为已添加到传递给--nowait-nodes选项的列表中 ,然后启动。默认值是15000(即管理服务器等待15秒)。将此参数设置为等于0意味着群集无限期地等待。

    StartNoNodegroupTimeout对于群集中的所有数据节点必须相同; 因此,您应该始终将其设置在文件[ndbd default]部分中 config.ini,而不是单个数据节点中。

    有关更多信息请参见第21.5.14节“在线添加NDB群集数据节点”

  • HeartbeatIntervalDbDb

    表21.89此表提供了HeartbeatIntervalDbDb数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 5000
    范围 10 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    发现失败节点的主要方法之一是使用心跳。该参数说明心跳信号发送的频率以及期望接收它们的频率。心跳不能被禁用。

    在连续丢失四个心跳间隔后,该节点被宣告死亡。因此,通过心跳机制发现故障的最长时间是心跳间隔的五倍。

    默认心跳间隔为5000毫秒(5秒)。该参数不能急剧改变,不应在节点之间变化很大。如果一个节点使用5000毫秒,并且节点观察它使用1000毫秒,那么显然该节点将很快被宣布为死亡。在线软件升级过程中可以更改此参数,但只能以小增量进行更改。

    另请参阅 网络通信和延迟,以及ConnectCheckIntervalDelay 配置参数的说明

  • HeartbeatIntervalDbApi

    表21.90此表提供了HeartbeatIntervalDbApi数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 1500
    范围 100 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    每个数据节点向每个MySQL服务器(SQL节点)发送心跳信号以确保它保持联系。如果MySQL服务器未能及时发送心跳,它将被宣布为 死亡 ”,在这种情况下,所有正在进行的事务都会完成并释放所有资源。直到前一个MySQL实例启动的所有活动都完成后,SQL节点才能重新连接。这种确定的三心跳标准与所描述的相同 HeartbeatIntervalDbDb

    默认时间间隔是1500毫秒(1.5秒)。因为每个数据节点都独立于所有其他数据节点,因此每个数据节点都会监视连接到它的MySQL服务器,因此这个时间间隔可能因个别数据节点而异

    有关更多信息,请参阅 网络通信和延迟

  • HeartbeatOrder

    表21.91该表提供了HeartbeatOrder数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 0
    范围 0 - 65535
    重新启动类型 小号

    数据节点以循环方式相互发送心跳,从而每个数据节点监视前一个节点。如果给定数据节点没有检测到心跳,则该节点会将圆圈中的前一个数据节点声明为 死亡(即不再可由群集访问)。数据节点死亡的确定是全局性的; 换一种说法; 一旦数据节点被宣告死亡,它就被群集中的所有节点认为是这样。

    与其他节点对之间的心跳相比,驻留在不同主机上的数据节点之间的心跳可能太慢(例如,由于心跳间隔非常低或临时连接问题),使得数据节点被宣告死亡,尽管节点仍然可以作为群集的一部分。

    在这种情况下,数据节点之间传输心跳的顺序可能会影响某个特定数据节点是否宣告死亡。如果这种声明不必要地发生,这又会导致节点组不必要的损失,从而导致集群失效。

    考虑一个设置,其中有4个数据节点A,B,C,和d 2台的主机计算机上运行的host1host2,并且这些数据节点弥补2个节点组,如图所示,在下表中:

    表21.92在两台主机host1,host2上运行的四个数据节点A,B,C,D; 每个数据节点属于两个节点组之一。

    节点组 节点运行 host1 节点运行 host2
    节点组0 节点A. 节点B.
    节点组1 节点C. 节点D.

    假设心跳按照A-> B-> C-> D-> A的顺序发送。在这种情况下,主机之间的心跳丢失导致节点B声明节点A死亡,节点C声明节点B死亡。这会导致节点组0丢失,从而导致集群失败。另一方面,如果传输顺序为A-> B-> D-> C-> A(并且所有其他条件如前所述保持不变),则心跳丢失导致节点A和D被宣告死亡; 在这种情况下,每个节点组都有一个幸存的节点,并且该集群存活。

    所述HeartbeatOrder 配置参数使得心跳发送用户可配置的顺序。默认值 HeartbeatOrder为零; 允许在所有数据节点上使用默认值,导致心跳传输的顺序由确定NDB如果使用此参数,则必须将该参数设置为群集中每个数据节点的非零值(最大值为65535),并且该值对于每个数据节点必须是唯一的; 这导致心跳传输从数据节点到数据节点以其HeartbeatOrder 值从最低到最高的顺序 继续(然后直接从具有最高数据节点的数据节点 HeartbeatOrder到具有最低值的数据节点,以完成该圆圈)。这些值不必是连续的; 例如,在前面描述的方案中强制执行心跳传输命令A-> B-> D-> C-> A,则可以HeartbeatOrder 如下所示设置 值:

    表21.93 HeartbeatOrder值强制A-> B-> D-> C-> A的心跳转换顺序。

    节点 HeartbeatOrder
    一个 10
    20
    C 三十
    d 25

    要使用此参数更改正在运行的NDB群集中的心跳传输顺序,必须首先HeartbeatOrder在全局配置(config.ini)文件(或多个文件)中为群集中的每个数据节点进行设置 要使更改生效,您必须执行以下任一操作:

    • 完整关闭并重新启动整个群集。

    • 2连续重新启动集群。 两次滚动重启都必须以相同的顺序重新启动所有节点

    您可以使用它DUMP 908来观察数据节点日志中此参数的效果。

  • ConnectCheckIntervalDelay

    表21.94该表提供了ConnectCheckIntervalDelay数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数启用数据节点之间的连接检查,其中一个数据节点的心跳检查未达到5个时间间隔( HeartbeatIntervalDbDb 毫秒)。

    这种数据节点在ConnectCheckIntervalDelay 毫秒间隔内进一步失败响应被认为是可疑的,并且在两个这样的间隔后被认为是死的。这在具有已知延迟问题的设置中可能很有用。

    此参数的默认值为0(禁用)。

  • TimeBetweenLocalCheckpoints

    表21.95此表提供了TimeBetweenLocalCheckpoints数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 4个字节的字数,以2为底的对数
    默认 20
    范围 0 - 31
    重新启动类型 ñ

    此参数是一个例外,因为它没有指定在开始新的本地检查点之前等待的时间; 相反,它用于确保本地检查点不在执行相对较少更新的群集中执行。在大多数具有较高更新率的群集中,很可能在完成前一个检查点之后立即启动新的本地检查点。

    添加自上一个本地检查点开始以来执行的所有写入操作的大小。此参数也是例外,因为它指定为4字节字数的基数2对数,所以默认值20表示4MB(4×2 20)的写操作,21表示8MB,因此最大值为31,相当于8GB的写操作。

    群集中的所有写入操作都被添加到一起。设置 TimeBetweenLocalCheckpoints 为6或更低意味着本地检查点将连续执行而不会暂停,与集群的工作负载无关。

  • TimeBetweenGlobalCheckpoints

    表21.96此表提供了TimeBetweenGlobalCheckpoints数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 2000
    范围 20 - 32000
    重新启动类型 ñ

    当一个事务被提交时,它被提交到镜像数据的所有节点的主内存中。但是,作为提交的一部分,事务日志记录不会刷新到磁盘。这种行为背后的原因是,在至少两台自主主机上安全地提交事务应该符合合理的持久性标准。

    确保即使是最糟糕的情况 - 集群完全崩溃 - 也能够正确处理也很重要。为了保证发生这种情况,在给定时间间隔内发生的所有事务都被放入全局检查点,这可以被看作是已经刷新到磁盘的一组已提交的事务。换句话说,作为提交过程的一部分,事务被放置在全局检查点组中。稍后,将该组的日志记录刷新到磁盘,然后将整组事务安全地提交到群集中所有计算机上的磁盘。

    该参数定义全局检查点之间的时间间隔。默认值是2000毫秒。

  • TimeBetweenGlobalCheckpointsTimeout

    表21.97该表提供了TimeBetweenGlobalCheckpointsTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 120000
    范围 10 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    该参数定义全局检查点之间的最小超时时间。默认值是120000毫秒。

  • TimeBetweenEpochs

    表21.98该表提供了TimeBetweenEpochs数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 100
    范围 0 - 32000
    重新启动类型 ñ

    此参数定义NDB群集复制的同步历元之间的时间间隔。默认值是100毫秒。

    TimeBetweenEpochs微型GCP实施的一部分,可用于提高NDB群集复制的性能。

  • TimeBetweenEpochsTimeout

    表21.99该表提供了TimeBetweenEpochsTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 0
    范围 0 - 256000
    重新启动类型 ñ

    此参数为NDB群集复制定义同步时期的超时。如果节点在由此参数确定的时间内未能参与全局检查点,则该节点将关闭。默认值是0; 换句话说,超时被禁用。

    TimeBetweenEpochsTimeout微型GCP实施的一部分,可用于提高NDB群集复制的性能。

    只要GCP保存时间超过1分钟或GCP提交时间超过10秒,此参数的当前值和警告就会写入群集日志。

    将此参数设置为零具有禁用保存超时,提交超时或两者兼有的GCP停止的效果。该参数的最大可能值是256000毫秒。

  • MaxBufferedEpochs

    表21.100此表提供了MaxBufferedEpochs数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 时代
    默认 100
    范围 0 - 100000
    重新启动类型 ñ

    订阅节点可能滞后的未处理时期的数量。超过此数字会导致滞后用户断开连接。

    对于大多数正常操作,默认值100就足够了。如果订阅节点的延迟足以导致断开连接,则通常是由于网络或有关进程或线程的调度问题。(在极少数情况下,问题可能是由于NDB客户端中的错误造成的 。)当时期较长时,可能需要将该值设置为低于默认值。

    断开连接可防止客户端问题影响数据节点服务,耗尽内存以缓冲数据并最终关闭。相反,只有客户端因断开连接而受到影响(例如,通过二进制日志中的间隙事件),从而强制客户端重新连接或重新启动进程。

  • MaxBufferedEpochBytes

    表21.101此表提供了MaxBufferedEpochBytes数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 26214400
    范围 26214400(0x01900000) - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此节点分配给缓冲时期的字节总数。

  • TimeBetweenInactiveTransactionAbortCheck

    表21.102此表提供了TimeBetweenInactiveTransactionAbortCheck数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 1000
    范围 1000 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    超时处理是通过检查每个事务的定时器来执行的,每个事务对于由此参数指定的每个时间间隔都是一次。因此,如果此参数设置为1000毫秒,则将检查每个事务每秒超时一次。

    默认值是1000毫秒(1秒)。

  • TransactionInactiveTimeout

    表21.103此表提供了TransactionInactiveTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 [见文字]
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数指定在事务中止之前允许在同一事务中的操作之间失效的最长时间。

    此参数的默认值是4G (也是最大值)。对于需要确保没有事务锁定时间过长的实时数据库,此参数应设置为相对较小的值。将其设置为0意味着应用程序永远不会超时。单位是毫秒。

  • TransactionDeadlockDetectionTimeout

    表21.104此表提供了TransactionDeadlockDetectionTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 1200
    范围 50 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    当节点执行涉及事务的查询时,节点将等待群集中的其他节点进行响应,然后再继续。此参数设置事务在数据节点中执行的时间量,即事务协调器等待参与事务的每个数据节点执行请求的时间。

    出于以下任何原因可能会导致无法响应:

    • 节点

    • 该操作已进入锁定队列

    • 请求执行操作的节点可能会严重超载。

    此超时参数说明事务协调器在中止事务之前等待另一个节点执行查询的时间,对于节点故障处理和死锁检测都很重要。

    默认的超时值是1200毫秒(1.2秒)。

    此参数的最小值为50毫秒。

  • DiskSyncSize

    表21.105此表提供了DiskSyncSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 4M
    范围 32K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    这是在将数据刷新到本地检查点文件之前要存储的最大字节数。这样做是为了防止写缓冲,这会显着地阻碍性能。这个参数不是为了代替 TimeBetweenLocalCheckpoints

    注意

    ODirect启用时,它是没有必要设置 DiskSyncSize; 事实上,在这种情况下,它的价值就被忽略了。

    默认值是4M(4兆字节)。

  • MaxDiskWriteSpeed

    表21.106此表提供了MaxDiskWriteSpeed数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 20M
    范围 1M - 1024G
    重新启动类型 小号

    当此NDB群集中没有重新启动(通过此数据节点或任何其他数据节点)时,由本地检查点和备份操作设置写入磁盘的最大速率(以每秒字节数为单位)。

    要设置此数据节点重新启动时允许的最大磁盘写入速率,请使用 MaxDiskWriteSpeedOwnRestart要设置其他数据节点重新启动时允许的最大磁盘写入速率,请使用 MaxDiskWriteSpeedOtherNodeRestart所有LCP和备份操作的磁盘写入的最低速度可通过设置进行调整 MinDiskWriteSpeed

  • MaxDiskWriteSpeedOtherNodeRestart

    表21.107此表提供了MaxDiskWriteSpeedOtherNodeRestart数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 50公尺
    范围 1M - 1024G
    重新启动类型 小号

    当此NDB群集中的一个或多个数据节点正在重新启动时,通过本地检查点和备份操作设置写入磁盘的最大速率(以每秒字节数为单位),而不是此节点。

    要设置此数据节点重新启动时允许的最大磁盘写入速率,请使用 MaxDiskWriteSpeedOwnRestart要设置在群集中任何位置没有数据节点重新启动时允许的最大磁盘写入速率,请使用 MaxDiskWriteSpeed所有LCP和备份操作的磁盘写入的最低速度可通过设置进行调整 MinDiskWriteSpeed

  • MaxDiskWriteSpeedOwnRestart

    表21.108此表提供了MaxDiskWriteSpeedOwnRestart数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 200M
    范围 1M - 1024G
    重新启动类型 小号

    在此数据节点重新启动时,通过本地检查点和备份操作设置写入磁盘的最大速率(以每秒字节数为单位)。

    要设置其他数据节点重新启动时允许的最大磁盘写入速率,请使用 MaxDiskWriteSpeedOtherNodeRestart要设置在群集中任何位置没有数据节点重新启动时允许的最大磁盘写入速率,请使用 MaxDiskWriteSpeed所有LCP和备份操作的磁盘写入的最低速度可通过设置进行调整 MinDiskWriteSpeed

  • MinDiskWriteSpeed

    表21.109此表提供了MinDiskWriteSpeed数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 10M
    范围 1M - 1024G
    重新启动类型 小号

    通过本地检查点和备份操作,设置写入磁盘的最小速率(以每秒字节数为单位)。

    允许用于在各种条件下的LCP和备份磁盘写入的最大速率是可调节的使用参数 MaxDiskWriteSpeedMaxDiskWriteSpeedOwnRestart以及 MaxDiskWriteSpeedOtherNodeRestart有关更多信息,请参阅这些参数的说明。

  • ArbitrationTimeout

    表21.110此表提供了ArbitrationTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 7500
    范围 10 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数指定数据节点等待仲裁器对仲裁消息的响应时间。如果超过这个值,网络将被假定为已经拆分。

    默认值是7500毫秒(7.5秒)。

  • Arbitration

    表21.111该表提供了仲裁数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 列举
    默认 默认
    范围 默认,禁用,WaitExternal
    重新启动类型 ñ

    Arbitration 参数允许选择仲裁方案,对应于此参数的3个可能值之一:

    • 默认。  这使得仲裁能够正常进行,这取决于ArbitrationRank 管理和API节点设置。这是默认值。

    • 禁用。 Arbitration = Disabled文件[ndbd default]部分进行 设置config.ini以完成与ArbitrationRank在所有管理和API节点上设置为0 相同的任务 Arbitration以这种方式设置,任何 ArbitrationRank设置将被忽略。

    • WaitExternal。 Arbitration 参数还使得可以配置仲裁,使得群集一直等待,直到ArbitrationTimeout 外部群集管理器应用程序确定的时间过去后才 执行仲裁,而不是在内部处理仲裁。这可以通过设置文件Arbitration = WaitExternal[ndbd default]部分 来完成 config.ini为了获得WaitExternal设置的最佳结果,建议 ArbitrationTimeout 是外部集群管理器执行仲裁所需时间的2倍。

    重要

    该参数只能在[ndbd default]群集配置文件部分中使用。Arbitration为单个数据节点设置不同的值时,群集的行为未指定

  • RestartSubscriberConnectTimeout

    表21.112此表提供了RestartSubscriberConnectTimeout数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 女士
    默认 12000
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 小号

    此参数确定数据节点等待订阅API节点连接的时间。一旦超时过期,任何缺失 API节点都将从群集中断开。要禁用此超时,请将其设置 RestartSubscriberConnectTimeout为0。

    虽然此参数以毫秒为单位指定,但超时本身已解析为下一个最大的整秒。

缓冲和记录。  多个[ndbd]配置参数使高级用户能够更好地控制节点进程使用的资源,并根据需要调整各种缓冲区大小。

将日志记录写入磁盘时,这些缓冲区用作文件系统的前端。如果节点以无盘模式运行,由于磁盘写入被 存储引擎的文件系统抽象层伪造,因此可以将这些参数设置为其最小值而不会受到损失 NDB

  • UndoIndexBuffer

    表21.113此表提供了UndoIndexBuffer数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 2M
    范围 1M - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    UNDO索引缓冲区的大小由此参数设置,在本地检查点使用。NDB存储引擎使用基于结合运算REDO日志检查点稠度的恢复方案。为了在不阻塞整个系统写入的情况下生成一致的检查点,在执行本地检查点时执行UNDO日志记录。一次在单个表格片段上激活UNDO日志记录。这种优化是可能的,因为表格完全存储在主存储器中。

    UNDO索引缓冲区用于主键哈希索引的更新。插入和删除重新排列散列索引; NDB存储引擎将写入UNDO日志记录,这些记录将所有物理更改映射到索引页,以便在系统重新启动时可以撤消它们。它还在本地检查点的开始处记录每个片段的所有活动插入操作。

    读取和更新设置锁定位并更新散列索引条目中的标题。这些更改由页面写入算法处理,以确保这些操作不需要UNDO日志记录。

    该缓冲区默认为2MB。最小值为1MB,这对大多数应用程序来说已经足够了。对于执行非常大或多次插入和删除大事务和大主键的应用程序,可能需要增加此缓冲区的大小。如果此缓冲区太小,则NDB存储引擎会发出内部错误代码677(Index UNDO buffers overloaded)。

    重要

    在滚动重启过程中减小此参数的值是不安全的。

  • UndoDataBuffer

    表21.114该表提供了UndoDataBuffer数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 16M
    范围 1M - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数设置UNDO数据缓冲区的大小,该数据缓冲区执行与UNDO索引缓冲区类似的功能,但UNDO数据缓冲区不是用于数据存储器而是用于索引存储器。此缓冲区在片段的本地检查点阶段用于插入,删除和更新。

    由于记录的操作越多,UNDO日志条目越大,因此此缓冲区也大于其索引内存对应部分,默认值为16MB。

    对于某些应用程序而言,这种内存量可能会不必要的大。在这种情况下,可以将此大小减小到最小1MB。

    很少有必要增加这个缓冲区的大小。如果有这种需求,最好检查一下磁盘是否可以真正处理由数据库更新活动引起的负载。通过增加此缓冲区的大小无法克服缺少足够的磁盘空间。

    如果此缓冲区太小并且拥塞,则NDB存储引擎会发出内部错误代码891(数据UNDO缓冲区过载)。

    重要

    在滚动重启过程中减小此参数的值是不安全的。

  • RedoBuffer

    表21.115此表提供了RedoBuffer数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 32M
    范围 1M - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    所有更新活动也需要记录。REDO日志可以在系统重新启动时重播这些更新。NDB恢复算法将数据的 模糊检查点与UNDO日志一起使用,然后应用REDO日志来回放所有更改直至恢复点。

    RedoBuffer设置写入REDO日志的缓冲区的大小。默认值是32MB; 最小值是1MB。

    如果此缓冲区太小,则 NDB存储引擎会发出错误代码1221(REDO日志缓冲区过载)。出于这个原因,如果您试图降低RedoBuffer群集配置中联机更改的一部分的值,您应该小心

    ndbmtd为每个LDM线程分配一个单独的缓冲区(请参阅 参考资料ThreadConfig)。例如,对于4个LDM线程, ndbmtd 数据节点实际上有4个缓冲区并RedoBuffer为每个节点分配 字节,总共为4 * RedoBuffer字节。

  • EventLogBufferSize

    表21.116此表提供了EventLogBufferSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 8192
    范围 0 - 64K
    重新启动类型 小号

    控制用于数据节点内的NDB日志事件的循环缓冲区的大小。

控制日志消息。  在管理集群时,能够控制为各种事件类型发送的日志消息的数量非常重要stdout对于每个事件类别,有16个可能的事件级别(从0到15)。将给定事件类别的事件报告设置为级别15意味着将该类别中的所有事件报告发送至 stdout; 将其设置为0意味着该类别中不会有任何事件报告。

默认情况下,仅发送启动消息 stdout,其余事件报告级别默认设置为0.原因是这些消息也发送到管理服务器的群集日志。

可以为管理客户端设置类似的一组级别,以确定要在群集日志中记录哪些事件级别。

  • LogLevelStartup

    表21.117此表提供了LogLevelStartup数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 1
    范围 0 - 15
    重新启动类型 ñ

    流程启动期间生成的事件的报告级别。

    默认级别是1。

  • LogLevelShutdown

    表21.118此表提供LogLevelShutdown数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重新启动类型 ñ

    作为节点正常关闭的一部分生成的事件的报告级别。

    默认级别是0。

  • LogLevelStatistic

    表21.119此表提供LogLevelStatistic数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重新启动类型 ñ

    统计事件的报告级别,例如主键读取次数,更新次数,插入次数,与缓冲区使用有关的信息等。

    默认级别是0。

  • LogLevelCheckpoint

    表21.120此表提供LogLevelCheckpoint数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 日志级别
    默认 0
    范围 0 - 15
    重新启动类型 ñ

    本地和全球检查点生成事件的报告级别。

    默认级别是0。

  • LogLevelNodeRestart

    表21.121此表提供LogLevelNodeRestart数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重新启动类型 ñ

    节点重启期间生成的事件的报告级别。

    默认级别是0。

  • LogLevelConnection

    表21.122该表提供了LogLevelConnection数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重新启动类型 ñ

    由群集节点之间的连接生成的事件的报告级别。

    默认级别是0。

  • LogLevelError

    表21.123该表提供LogLevelError数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重新启动类型 ñ

    由整个集群的错误和警告生成的事件的报告级别。这些错误不会导致任何节点故障,但仍被认为值得报告。

    默认级别是0。

  • LogLevelCongestion

    表21.124此表提供了LogLevelCongestion数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 水平
    默认 0
    范围 0 - 15
    重新启动类型 ñ

    由拥塞产生的事件的报告级别。这些错误不会导致节点故障,但仍被认为值得报告。

    默认级别是0。

  • LogLevelInfo

    表21.125该表提供了LogLevelInfo数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重新启动类型 ñ

    生成的事件的报告级别,用于了解群集的一般状态信息。

    默认级别是0。

  • MemReportFrequency

    表21.126此表提供了MemReportFrequency数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数控制数据节点内存使用情况报告在集群日志中的记录频率; 它是表示报告之间秒数的整数值。

    每个数据节点的数据存储器和索引存储器使用被记录为两者的百分比和若干的32 KB页DataMemoryIndexMemory分别,中设置config.ini 文件。例如,如果 DataMemory等于100 MB,并且给定的数据节点使用50 MB用于数据存储器,则群集日志中的相应行可能如下所示:

    2006-12-24 01:18:16 [MgmSrvr]信息 - 节点2:数据使用率为50%(总共2560页共1280页32K页)
    

    MemReportFrequency 不是必需的参数。如果使用的话,它可以对在所有簇数据的节点被设置[ndbd default] 的部分config.ini,并且也可以被设置或重写在对应的个人数据节点[ndbd]的配置文件的部分。最小值(也是默认值)为0,在这种情况下,仅当内存使用量达到特定百分比(80%,90%和100%)时才记录内存报告,正如在 Section 21.5.6.2,“NDB集群日志事件”

  • StartupStatusReportFrequency

    表21.127此表提供了StartupStatusReportFrequency数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    当启动数据节点时 --initial,它将在启动阶段4期间初始化重做日志文件(请参见 第21.5.1节“NDB群集启动阶段摘要”)。当非常大的值被设定为 NoOfFragmentLogFilesFragmentLogFileSize或两者,该初始化会花费较长time.You可以强制对这个过程的进度的报告被周期性记录,由所述的装置 StartupStatusReportFrequency 配置参数。在这种情况下,根据文件数量和已初始化的空间量,在集群日志中报告进度,如下所示:

    2009-06-20 16:39:23 [MgmSrvr] INFO  - 节点1:本地重做日志文件初始化状态:
    #总文件:80,已完成:60
    #Total MBytes:20480,已完成:15557
    2009-06-20 16:39:23 [MgmSrvr] INFO  - 节点2:本地重做日志文件初始化状态:
    #总文件:80,已完成:60
    #Total MBytes:20480,已完成:15570
    

    这些报告StartupStatusReportFrequency 在开始阶段4期间每秒记录一次。 如果 StartupStatusReportFrequency 为0(缺省值),则只有在重做日志文件初始化过程的开始和完成时才将报告写入群集日志。

数据节点调试参数。  也可以使用通过创建和删除表生成的事件来记录跟踪记录 DictTrace该参数仅在调试NDB内核代码时有用。 DictTrace取一个整数值。0(默认 - 无记录)和1(记录启用)是NDB 7.5.2之前唯一支持的值。在NDB 7.5.2和更高版本中,将此参数设置为2将启用其他DBDICT调试输出的记录(错误#20368450)。

备份参数。 [ndbd]本节中讨论参数定义了用于执行联机备份的内存缓冲区。

  • BackupDataBufferSize

    表21.128该表提供了BackupDataBufferSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 16M
    范围 512K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 16M
    范围 2M - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ
    版本(或更高版本) NDB 7.5.1
    类型或单位 字节
    默认 16M
    范围 512K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    在创建备份时,有两个缓冲区用于将数据发送到磁盘。备份数据缓冲区用于填写通过扫描节点表格记录的数据。一旦这个缓冲区被填充到指定的级别 BackupWriteSize,页面就被发送到磁盘。在将数据清空到磁盘时,备份过程可以继续填充此缓冲区,直到空间不足。发生这种情况时,备份过程暂停扫描并等待,直到某些磁盘写入完成释放内存,以便扫描可能继续。

    该参数的默认值是16MB。NDB 7.5.1中的最小值从2M变为512K。(Bug#22749509)

  • BackupDiskWriteSpeedPct

    表21.129此表提供了BackupDiskWriteSpeedPct数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 百分
    默认 50
    范围 0 - 90
    重新启动类型 ñ

    在正常操作期间,数据节点尝试最大化用于本地检查点和备份的磁盘写入速度,同时保持在由MinDiskWriteSpeed设置的范围内 MaxDiskWriteSpeed磁盘写入限制为每个LDM线程分配了总预算的平等份额。这允许并行LCP在不超过磁盘I / O预算的情况下进行。由于仅由一个LDM线程执行备份,这实际上会导致预算缩减,导致备份完成时间更长,并且 - 如果更改速率足够高 - 在备份日志缓冲区填充率为高于可实现的写入速率。

    这个问题可以通过使用BackupDiskWriteSpeedPct配置参数来解决, 配置参数取值范围为0-90(含),该值被解释为节点在共享剩余预算之前保留的最大写入率预算的百分比用于LCP的LDM线程。运行备份的LDM线程接收备份的整个写入速率预算,以及本地检查点写入速率预算的(减少的)份额。(这会使磁盘写入速率预算与NDB Cluster 7.3及更早版本中的处理方式类似)。

    该参数的默认值是50(解释为50%)。

  • BackupLogBufferSize

    表21.130此表提供了BackupLogBufferSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 16M
    范围 2M - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    备份日志缓冲区的作用类似于备份数据缓冲区所扮演的角色,只不过它用于生成执行备份期间所做的所有表写操作的日志。除了在备份日志缓冲区中没有更多空间时,备份失败之外,与备份数据缓冲区一样,这些页面的写入原理也相同。出于这个原因,备份日志缓冲区的大小必须足够大,以处理备份时写入活动所造成的负载。请参见 第21.5.3.3节“NDB群集备份的配置”

    此参数的默认值应该足以满足大多数应用程序的需求。实际上,磁盘写入速度不足导致备份失败的可能性大于备份日志缓冲区变满时导致备份失败的可能性。如果磁盘子系统未配置为由应用程序引起的写入负载,则群集不太可能执行所需的操作。

    最好以这样的方式配置群集节点,以使处理器成为瓶颈而不是磁盘或网络连接。

    该参数的默认值是16MB。

  • BackupMemory

    表21.131此表提供了BackupMemory数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 32M
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数已被弃用,并且可能在将来版本的NDB群集中删除。任何为其设置的设置都将被忽略。

  • BackupReportFrequency

    表21.132此表提供了BackupReportFrequency数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数控制备份期间在管理客户端中发出备份状态报告的频率以及将这些报告写入群集日志的频率(提供的群集事件日志记录配置为允许它 - 请参阅 日志记录和检查点)。 BackupReportFrequency 表示备份状态报告之间的时间(秒)。

    默认值是0。

  • BackupWriteSize

    表21.133此表提供了BackupWriteSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 256K
    范围 32K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数指定由备份日志和备份数据缓冲区写入磁盘的消息的缺省大小。

    该参数的默认值是256KB。

  • BackupMaxWriteSize

    表21.134该表提供了BackupMaxWriteSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 1M
    范围 256K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数指定由备份日志和备份数据缓冲区写入磁盘的消息的最大大小。

    该参数的默认值是1MB。

注意

备份文件的位置由 BackupDataDir数据节点配置参数决定。

其他要求。  指定这些参数时,以下关系必须成立。否则,数据节点将无法启动。

  • BackupDataBufferSize >= BackupWriteSize + 188KB

  • BackupLogBufferSize >= BackupWriteSize + 16KB

  • BackupMaxWriteSize >= BackupWriteSize

NDB集群实时性能参数

[ndbd]本节中讨论参数用于调度和锁定多处理器数据节点主机上特定CPU的线程。

注意

要使用这些参数,数据节点进程必须以系统根目录运行。

  • LockExecuteThreadToCPU

    表21.135该表提供了LockExecuteThreadToCPU数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 一组CPU ID
    默认 0
    范围 ...
    重新启动类型 ñ

    ndbd一起使用时,此参数(现在是字符串)指定分配给处理NDBCLUSTER执行线程的CPU的ID ndbmtd一起使用时,此参数的值是分配给处理执行线程的逗号分隔的CPU ID列表。列表中的每个CPU ID应该是一个介于0到65535(含)之间的整数。

    指定的ID的数量应该与由确定的执行线程的数量匹配 MaxNoOfExecutionThreads但是,使用此参数时,不保证以任何给定顺序将线程分配给CPU。你可以使用这个类型获得更细粒度的控制 ThreadConfig

    LockExecuteThreadToCPU 没有默认值。

  • LockMaintThreadsToCPU

    表21.136该表提供了LockMaintThreadsT​​oCPU数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 CPU ID
    默认 0
    范围 0 - 64K
    重新启动类型 ñ

    此参数指定分配用于处理NDBCLUSTER维护线程的CPU的ID

    该参数的值是0到65535(含)范围内的整数。没有默认值

  • RealtimeScheduler

    表21.137此表提供了RealtimeScheduler数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    将此参数设置为1将启用数据节点线程的实时调度。

    默认值为0(禁用调度)。

  • SchedulerExecutionTimer

    表21.138该表提供了SchedulerExecutionTimer数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 微秒
    默认 50
    范围 0 - 11000
    重新启动类型 ñ

    此参数指定要在发送之前在调度程序中执行的线程以微秒为单位的时间。将其设置为0可以最大限度地缩短响应时间; 要实现更高的吞吐量,您可以增加此值,但需要延长响应时间。

    缺省值为50微秒,我们的测试显示,在高负载情况下稍微提高吞吐量而不会实质性延迟请求。

  • SchedulerResponsiveness

    表21.139此表提供了SchedulerResponsiveness数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认
    范围 0 - 10
    重新启动类型 小号

    NDB调度器中设置速度和吞吐量之间的平衡该参数取一个整数,其值在0-10范围内,默认值为5。相对于吞吐量,更高的值提供更好的响应时间 较低的值会以较长的响应时间为代价提高吞吐量。

  • SchedulerSpinTimer

    表21.140此表提供了SchedulerSpinTimer数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 微秒
    默认 0
    范围 0 - 500
    重新启动类型 ñ

    此参数指定要在睡眠之前在调度程序中执行的线程以微秒为单位的时间。

    默认值是0。

  • BuildIndexThreads

    表21.141该表提供了BuildIndexThreads数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 0
    范围 0 - 128
    重新启动类型 小号
    版本(或更高版本) NDB 7.6.4
    类型或单位 数字
    默认 128
    范围 0 - 128
    重新启动类型 小号

    此参数确定在系统或节点启动期间以及运行ndb_restore 时重建有序索引时要创建的线程数 --rebuild-indexes仅当每个数据节点的表有多个片段时才支持它(例如,当 COMMENT="NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_LDM_X_2" 与它一起使用时CREATE TABLE)。

    将此参数设置为0(默认值)将禁用有序索引的多线程构建。

    使用ndbdndbmtd时支持此参数

    您可以通过将TwoPassInitialNodeRestartCopy 数据节点配置参数 设置为,在数据节点初始重新启动期间启用多线程构建 TRUE

  • TwoPassInitialNodeRestartCopy

    表21.142该表提供了TwoPassInitialNodeRestartCopy数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ
    版本(或更高版本) NDB 7.6.4
    类型或单位 布尔
    默认 真正
    范围 真假
    重新启动类型 ñ

    可以通过将此配置参数设置为启用数据节点的初始重新启动来启用有序索引的多线程构建true,从而在初始节点重新启动期间启用数据的双向复制。从NDB 7.6.4开始,这是默认值(错误#26704312,错误#27109117)。

    您还必须设置 BuildIndexThreads为非零值。

  • Numa

    表21.143该表提供了Numa数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 1
    范围 ...
    重新启动类型 ñ

    此参数确定是否由操作或数据节点进程控制非均匀内存访问(NUMA),数据节点是使用ndbd 还是ndbmtd默认情况下, NDB尝试在主机操作系统提供NUMA支持的任何数据节点上使用交错NUMA内存分配策略。

    设置Numa = 0意味着数据节点进程本身不会尝试设置内存分配策略,并允许这种行为由操作系统决定,这可能会由单独的numactl工具进一步指导也就是说, Numa = 0产生系统默认行为,可以通过numactl自定义 对于许多Linux系统,系统默认行为是在分配时为任何给定进程分配套接字本地内存。这在使用ndbmtd时可能会有问题; 这是因为nbdmtd在启动时分配所有内存,导致不平衡,为不同的套接字提供不同的访问速度,尤其是将页面锁定在主内存中时。

    设置Numa = 1意味着数据节点进程用于libnuma请求交错存储器分配。(这也可以使用numactl在操作系统级手动完成 。)使用交叉分配有效地告诉数据节点进程忽略非一致的内存访问,但不尝试利用快速本地内存; 相反,数据节点进程试图避免由于远程内存缓慢而造成的不平衡。如果不希望交错分配,请将其设置Numa为0,以便在操作系统级别确定所需的行为。

    Numa配置参数只在Linux系统中支持 libnuma.so可用。

多线程配置参数(ndbmtd)。  ndbmtd默认作为单线程进程运行,并且必须使用两种方法中的任何一种配置为使用多个线程,这两种方法都需要在config.ini文件中设置配置参数 第一种方法是简单地为MaxNoOfExecutionThreads 配置参数设置适当的值 第二种方法可以为 使用的ndbmtd多线程 设置更复杂的规则ThreadConfig接下来的几段提供了有关这些参数的信息以及它们在多线程数据节点中的用法。

  • MaxNoOfExecutionThreads

    表21.144此表提供了MaxNoOfExecutionThreads多线程数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 2
    范围 2 - 72
    重新启动类型 IS

    此参数直接控制ndbmtd使用的执行线程数,最多可达72个。尽管此参数文件中设置[ndbd][ndbd default]部分 设置 config.ini,但它仅限于 ndbmtd,不适用于 ndbd

    设置MaxNoOfExecutionThreads设置文件中矩阵确定的每种类型的线程数 storage/ndb/src/kernel/vm/mt_thr_config.cpp这个表格显示了这些线程数量的可能值MaxNoOfExecutionThreads

    表21.145 MaxNoOfExecutionThreads值和线程类型相应的线程数(LQH,TC,Send,Receive)。

    MaxNoOfExecutionThreads LDM主题 TC线程 发送主题 接收主题
    0 .. 3 1 0 0 1
    4 .. 6 2 0 0 1
    7 .. 8 4 0 0 1
    9 4 2 0 1
    10 4 2 1 1
    11 4 3 1 1
    12 6 2 1 1
    13 6 3 1 1
    14 6 3 1 2
    15 6 3 2 2
    16 8 3 1 2
    17 8 4 1 2
    18 8 4 2 2
    19 8 2 2
    20 10 4 2 2
    21 10 2 2
    22 10 2 3
    23 10 6 2 3
    24 12 2 3
    25 12 6 2 3
    26 12 6 3 3
    27 12 7 3 3
    28 12 7 3 4
    29 12 8 3 4
    三十 12 8 4 4
    31 12 9 4 4
    32 16 8 3 3
    33 16 8 3 4
    34 16 8 4 4
    35 16 9 4 4
    36 16 10 4 4
    37 16 10 4
    38 16 11 4
    39 16 11
    40 20 10 4 4
    41 20 10 4
    42 20 11 4
    43 20 11
    44 20 12
    45 20 12 6
    46 20 13 6
    47 20 13 6 6
    48 24 12
    49 24 12 6
    50 24 13 6
    51 24 13 6 6
    52 24 14 6 6
    53 24 14 6 7
    54 24 15 6 7
    55 24 15 7 7
    56 24 16 7 7
    57 24 16 7 8
    58 24 17 7 8
    59 24 17 8 8
    60 24 18 8 8
    61 24 18 8 9
    62 24 19 8 9
    63 24 19 9 9
    64 32 16 7 7
    65 32 16 7 8
    66 32 17 7 8
    67 32 17 8 8
    68 32 18 8 8
    69 32 18 8 9
    70 32 19 8 9
    71 32 20 8 9
    72 32 20 8 10

    总是有一个SUMA(复制)线程。

    NoOfFragmentLogParts 应该设置为等于由ndbmtd使用的LDM线程的数量, 由该参数的设置确定。这个比例不应该大于4:1; 从NDB 7.5.7和NDB 7.6.3开始,这种情况下的配置被明确禁止。(Bug#25333414)

    LDM线程的数量还决定了NDB未明确分区使用的分区数量; 这是LDM线程数乘以群集中数据节点数的数量。(如果 ndbd在数据节点而不是ndbmtd上使用,那么始终有一个LDM线程;在这种情况下,自动创建的分区数等于数据节点的数量,请参见第21.1.2节“NDB群集节点,节点组,副本和分区“,以获取更多信息。

    如果磁盘页面缓冲区不够大,在使用多于默认数量的LDM线程时为磁盘数据表添加大型表空间可能会导致资源和CPU使用率问题; 请参阅DiskPageBufferMemory 配置参数的描述,以 获取更多信息。

    线程类型将在本节稍后介绍(请参阅 ThreadConfig)。

    将此参数设置为允许的值范围之外会导致管理服务器在启动时中止,并显示错误错误行 numbervalue参数MaxNoOfExecutionThreads的值非法

    因为MaxNoOfExecutionThreads0或1的值在内部舍入 NDB为2,所以2被认为是该参数的默认值和最小值。

    MaxNoOfExecutionThreads通常旨在设置为等于可用CPU线程的数量,并分配适合典型工作负载的每种类型的线程数。它不会将特定的线程分配给指定的CPU。对于需要根据所提供的设置进行更改或将线程绑定到CPU的情况,您应该使用 ThreadConfig 相反的方法,这样可以将每个线程直接分配给所需的类型,CPU或两者。

    多线程数据节点进程至少会生成以下列出的线程:

    • 1本地查询处理程序(LDM)线程

    • 1收到线程

    • 1订阅管理器(SUMA或复制)线程

    对于MaxNoOfExecutionThreads8或更小值,不会创建TC线程,而是由主线程执行TC处理。

    更改LDM线程数始终需要重新启动系统,无论是使用此参数还是更改 ThreadConfig

    在NDB 7.6之前,如果集群的 IndexMemory使用率大于50%,则更改此操作需要首次重启集群。IndexMemory在这种情况下,建议最多使用30-35% )。否则,节点之间的资源使用情况和LDM线程分配无法平衡,这可能导致LDM线程利用率不足和过度使用,最终导致数据节点故障。在NDB 7.6和以后,在初始重启要求以实现在此参数的变化。

  • NoOfFragmentLogParts

    表21.146该表提供了NoOfFragmentLogParts多线程数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 4
    范围 4,8,12,16,24,32
    重新启动类型

    设置属于此ndbmtd的重做日志的日志文件组数最大值是32; 该值必须是4的偶数。

    NoOfFragmentLogParts应该设置为等于ndbmtd使用的LDM线程的数量, 由设置确定 MaxNoOfExecutionThreads从NDB 7.5.7和NDB 7.6.3开始,不允许配置这个数字大于4的配置。(Bug#25333414)

    请参阅说明以 MaxNoOfExecutionThreads 了解更多信息。

  • ThreadConfig

    表21.147该表提供了ThreadConfig多线程数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 “”
    范围 ...
    重新启动类型 IS

    此参数用于ndbmtd将不同类型的线程分配给不同的CPU。它的值是一个字符串,其格式具有以下语法:

    ThreadConfig:= entry[,entry[,...]]
    
    entry:= type= { param[,param[,...]]}
    
    type:= ldm | 主| | recv | 发送| rep | io | tc | 看门狗| idxbld
    
    param:= count = number
      | cpubind = cpu_list
      | cpuset = cpu_list
      | spintime =number
      | 实时= {0 | 1}
      | 是nosend = {0 | 1}
      | thread_prio = {0..10}
      | cpubind_exclusive = cpu_list
      | cpuset_exclusive =cpu_list
    

    即使列表中只有一个参数,也需要围绕参数列表 的大括号({... })。

    param(参数)指定的任何或所有的以下信息:

    • 给定类型的线程数(count)。

    • 一组给定类型的线程将被非唯一地绑定的CPU集合。这是通过中的任一个来确定cpubindcpuset)。cpubind 导致每个线程被绑定(非唯一地)到集合中的CPU; cpuset意味着每个线程都被绑定(非唯一地)到指定的一组CPU。

      在Solaris上,您可以指定一组CPU,将给定类型的线程独占绑定到该CPU。cpubind_exclusive使每个线程仅被绑定到集合中的CPU; cpuset_exclsuive意味着每个线程都仅限于指定的一组CPU。

      仅一个cpubindcpusetcpubind_exclusive,或 cpuset_exclusive可以在一个单一的结构提供。

    • spintime 确定线程在进入睡眠之前旋转的等待时间(以微秒为单位)。

      for的默认值spintimeSchedulerSpinTimer 数据节点配置参数的值

      spintime 不适用于I / O线程,看门狗或脱机索引构建线程,因此不能为这些线程类型设置。

    • realtime可以设置为0或1.如果设置为1,则线程以实时优先级运行。这也意味着thread_prio 不能设置。

      realtime参数默认设置为RealtimeScheduler 数据节点配置参数的值

      realtime 不能为脱机索引构建线程设置。

    • 通过设置nosend为1,可以阻止mainldmrep,或 tc线程协助发送线程。该参数默认为0,不能与其他类型的线程一起使用。

      nosend 在NDB 7.6.4中添加。

    • thread_prio是一个线程优先级,可以设置从0到10,其中10表示最高优先级。默认值为5.此参数的精确效果是​​特定于平台的,本节后面将对此进行介绍。

      无法为脱机索引构建线程设置线程优先级。

    平台提供的thread_prio设置和效果。 thread_prio Linux / FreeBSD,Solaris和Windows 的实现方式有所不同。在下面的列表中,我们依次讨论它对每个平台的影响:

    • Linux和FreeBSD:我们映射 thread_prio到一个要提供给nice系统调用的值。由于进程的较低优度值表示较高的进程优先级,因此增加 thread_prio会降低该nice值。

      表21.148在Linux和FreeBSD上将thread_prio映射为nice值

      thread_prio nice
      0 19
      1 16
      2 12
      3 8
      4 4
      0
      6 -4
      7 -8
      8 -12
      9 -16
      10 -20

      某些操作系统可能会提供20的最大进程完好性级别,但这不是所有目标版本都支持的; 为此,我们选择19作为nice可设置的最大值

    • Solaristhread_prioSolaris上的设置会设置Solaris FX优先级,映射如下表所示:

      表21.149在Solaris上将thread_prio映射到FX优先级

      thread_prio Solaris FX优先
      0 15
      1 20
      2 25
      3 三十
      4 35
      40
      6 45
      7 50
      8 55
      9 59
      10 60

      一个thread_prio9设置映射在Solaris上的特殊FX优先级值59,这意味着操作系统还试图强行线程处理自己的CPU核心单独运行。

    • Windows:我们映射 thread_prio到传递给Windows APISetThreadPriority()函数的Windows线程优先级值 该映射如下表所示:

      表21.150将thread_prio映射到Windows线程优先级

      thread_prio Windows线程优先
      0 - 1 THREAD_PRIORITY_LOWEST
      2 - 3 THREAD_PRIORITY_BELOW_NORMAL
      4 - 5 THREAD_PRIORITY_NORMAL
      6 - 7 THREAD_PRIORITY_ABOVE_NORMAL
      8 - 10 THREAD_PRIORITY_HIGHEST

    type属性表示NDB线程类型。count下面的列表提供了支持的线程类型以及每个允许的范围

    • ldmDBLQH处理数据的本地查询处理程序(内核块)。使用的LDM线程越多,数据变得越分散。每个LDM线程维护自己的一组数据和索引分区,以及它自己的重做日志。设置的值 ldm必须是值1,2,4,6,8,12,16,24或32中的一个。

      更改LDM线程的数量需要系统重新启动才能对群集操作有效且安全。(使用这种方法时也是如此 MaxNoOfExecutionThreads)。如果IndexMemory 使用率超过50%,则需要初始重新启动群集; IndexMemory在这种情况下,建议最多使用30-35% 否则,内存和LDM线程的分配不能在节点之间进行平衡,最终可能导致数据节点故障。

      如果磁盘数据表使用多于默认数量的LDM,则添加大型表空间(数百GB或更多)可能会导致资源和CPU使用率问题(如果 DiskPageBufferMemory 不够大)。

    • tcDBTC包含正在进行的事务状态的事务协调器线程(内核块)。TC线程的最大数量是32。

      最佳情况下,每个新的事务都可以分配给一个新的TC线程。在大多数情况下,每2个LDM线程中有1个TC线程足以保证这可能发生。在与读取次数相比写入次数相对较少的情况下,可能每4个LQH线程仅需要1个TC线程来维持事务状态。相反,在执行大量更新的应用程序中,TC线程与LDM线程的比率可能接近1(例如,3个TC线程与4个LDM线程)。

      设置tc为0会导致TC处理由主线程完成。在大多数情况下,这与将其设置为1的效果相同。

      范围:0 - 32

    • main:数据字典和事务协调器(DBDIHDBTC内核块),提供模式管理。这总是由一个专用线程处理。

      范围:仅限1。

    • recv:接收线程(CMVMI内核块)。每个接收线程处理一个或多个套接字,用于与NDB群集中的其他节点进行通信,每个节点只有一个套接字。NDB集群支持多个接收线程; 最多有16个这样的线程。

      范围:1 - 16

    • send:发送线程(CMVMI内核块)。为了提高吞吐量,可以从一个或多个单独的专用线程(最多8个)执行发送。

      以前,所有线程都直接处理自己的发送; 这仍然可以通过将发送线程的数量设置为0来实现(当MaxNoOfExecutionThreads 设置小于10 时也会发生这种情况 )。虽然这样做可能会对吞吐量产生负面影响,但在某些情况下也可以减少延迟。

      范围:0 - 16

    • rep:复制线程(SUMA内核块)。异步复制操作始终由单个专用线程处理。

      范围:仅限1。

    • io:文件系统和其他杂项操作。这些并不是要求苛刻的任务,并且总是通过单个专用I / O线程来处理。

      范围:仅限1。

    • watchdog:与此类型关联的参数设置实际上应用于多个线程,每个线程都有特定的用途。这些线程包括SocketServer 从其他节点接收连接设置线程; SocketClient线程尝试建立到其他节点的连接; 以及用于检查线程正在进行的线程看门狗线程。

      范围:仅限1。

    • idxbld:离线索引构建线程。与前面列出的其他线程类型不同,这些线程类型是永久线程,它们是临时线程,仅在节点或系统重新启动期间或运行ndb_restore 时创建和使用--rebuild-indexes它们可能会绑定到与永久线程类型绑定的CPU集重叠的CPU集。

      thread_priorealtime并且 spintime不能为脱机索引构建线程设置值。另外, count这种类型的线程会被忽略。

      如果idxbld未指定,则默认行为如下所示:

      • 如果I / O线程也未绑定,则脱机索引构建线程不受限制,并且这些线程使用任何可用的内核。

      • 如果I / O线程被绑定,则脱机索引构建线程将绑定到整个绑定线程集合,因为这些线程不应该执行其他任务。

      范围:0 - 1。

      该线程类型已添加到NDB 7.6.4中。(错误#25835748,错误#26928111)

在NDB 7.6之前,更改ThreadCOnfig还需要初始重启群集。从NDB 7.6.1开始,不再需要初始重启。ThreadConfig无论NDB版本如何, 总是需要重新启动系统才能进行更改

NDB 7.6.4和更高版本可以通过以下两个标准区分线程类型:

  • 线程是否是执行线程。类型的线程 mainldmrecvreptc,和send是执行线程; iowatchdog并且idxbld 线程不被视为执行线程。

  • 线程对给定任务的分配是永久的还是临时的。目前所有的线程类型都 idxbld被认为是永久的; idxbld线程被视为临时线程。

简单的例子:

#例1。

threadconfig.vi可= LDM = {计数= 2,cpubind = 1,2},主要= {cpubind = 12},代表= {cpubind = 11}

#例2。

threadconfig.vi可=主= {cpubind = 0},LDM = {计数= 4,cpubind = 1,2,5,6},IO = {cpubind = 3}

为数据节点主机配置线程使用情况时,通常需要为操作系统和其他任务保留一个或多个CPU。因此,对于具有24个CPU的主机,您可能希望使用20个CPU线程(其余用途为4个),包含8个LDM线程,4个TC线程(LDM线程数的一半),3个发送线程,3个接收线程,每个线程用于模式管理,异步复制和I / O操作。(当MaxNoOfExecutionThreads 设置等于20 时,这与几乎相同的线程分布 )。以下ThreadConfig设置执行这些分配,并将 所有这些线程绑定到特定的CPU:

ThreadConfig = ldm {count = 8,cpubind = 1,2,3,4,5,6,7,8},main = {cpubind = 9},io = {cpubind = 9},\
rep = {cpubind = 10},tc {count = 4,cpubind = 11,12,13,14},recv = {count = 3,cpubind = 15,16,17}
发送{计数= 3,cpubind = 18,19,20}

在大多数情况下,应该可以将主(模式管理)线程和I / O线程绑定到同一个CPU上,就像我们在刚刚显示的示例中所做的那样。

下面的示例结合使用这两种定义CPU的基团cpusetcpubind,以及使用线程优先级的。

ThreadConfig = ldm = {count = 4,cpuset = 0-3,thread_prio = 8,spintime = 200},\
ldm = {count = 4,cpubind = 4-7,thread_prio = 8,spintime = 200},\
tc = {count = 4,cpuset = 8-9,thread_prio = 6},send = {count = 2,thread_prio = 10,cpubind = 10-11}
主= {计数= 1,cpubind = 10},代表= {计数= 1,cpubind = 11}
        

在这种情况下,我们创建两个LDM组; 第一次使用 cpubind和第二次使用 cpusetthread_priospintime为每个组设置相同的值。这意味着总共有8个LDM线程。(您应该确保 NoOfFragmentLogParts 也设置为8.)四个TC线程只使用两个CPU; 使用时cpuset可以指定比组中的线程更少的CPU。(这不适用于 cpubind)。发送线程使用两个线程cpubind将这些线程绑定到CPU 10和11.主线程和rep线程可以重用这些CPU。

此示例说明如何ThreadConfig以及 NoOfFragmentLogParts可能为具有超线程的24-CPU主机进行设置,从而使CPU 10,11,22和23可用于操作系统功能和中断:

NoOfFragmentLogParts = 10
ThreadConfig = ldm = {count = 10,cpubind = 0-4,12-16,thread_prio = 9,spintime = 200},\
tc = {count = 4,cpuset = 6-7,18-19,thread_prio = 8},send = {count = 1,cpuset = 8},\
recv = {count = 1,cpuset = 20},main = {count = 1,cpuset = 9,21},rep = {count = 1,cpuset = 9,21}
IO = {计数= 1,cpuset = 9,21,thread_prio = 8},看门狗= {计数= 1,cpuset = 9,21,thread_prio = 9}

接下来的几个例子包括设置 idxbld其中前两个演示了如何定义的CPU集idxbld可以与其他(永久)线程类型指定的CPU集重叠,第一个使用cpuset和第二个使用 cpubind

ThreadConfig = main,ldm = {count = 4,cpuset = 1-4},tc = {count = 4,cpuset = 5,6,7},\
IO = {cpubind = 8},idxbld = {cpuset = 1-8}

threadconfig.vi可=主,LDM = {计数= 1,cpubind = 1},idxbld = {计数= 1,cpubind = 1}

下一个示例为I / O线程指定一个CPU,但不为索引构建线程指定一个CPU:

ThreadConfig = main,ldm = {count = 4,cpuset = 1-4},tc = {count = 4,cpuset = 5,6,7},\
IO = {cpubind = 8}

由于ThreadConfig刚刚显示设置将线程锁定到编号为1至8的八个内核,因此它与以下显示的设置相同:

ThreadConfig = main,ldm = {count = 4,cpuset = 1-4},tc = {count = 4,cpuset = 5,6,7},\
IO = {cpubind = 8},idxbld = {cpuset = 1,2,3,4,5,6,7,8}

为了充分利用ThreadConfig报价使用的稳定性,有必要确保CPU处于隔离状态,并确保它们不会受到中断或被操作系统安排进行其他任务。在许多Linux系统,你可以通过设置这样做IRQBALANCE_BANNED_CPUS/etc/sysconfig/irqbalance0xFFFFF0,并通过使用 isolcpus在启动选项 grub.conf有关具体信息,请参阅您的操作系统或平台文档。

磁盘数据配置参数。  影响磁盘数据行为的配置参数包括以下内容:

  • DiskPageBufferEntries

    表21.151该表提供了DiskPageBufferEntries数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 32K页
    默认 10
    范围 1 - 1000
    重新启动类型 ñ

    这是要分配的页面条目(页面引用)的数量。它被指定为32K页数 DiskPageBufferMemory在大多数情况下,默认值已足够,但如果遇到磁盘数据表上非常大的事务问题,则可能需要增加此参数的值。每个页面条目需要大约100个字节。

  • DiskPageBufferMemory

    表21.152此表提供了DiskPageBufferMemory数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 64M
    范围 4M - 1T
    重新启动类型 ñ

    这决定了用于在磁盘上缓存页面的空间量,并且文件[ndbd][ndbd default]部分中设置 config.ini它以字节为单位进行测量。每个页面占用32 KB。这意味着NDB群集磁盘数据存储总是使用N* 32 KB内存,其中N有一些非负整数。

    该参数的默认值是 64M(每页32 KB的2000页)。

    如果在for (例如)中DiskPageBufferMemory使用超过默认LDM线程数的值时,for的值设置得太低 ,则尝试将大型(例如500G)数据文件添加到基于磁盘的表时会出现问题,其中该进程无限期地占用一个CPU核心。 ThreadConfig{ldm=6...}NDB

    这是因为,作为将数据文件添加到表空间的一部分,扩展页面被锁定到额外PGMAN工作线程的内存中,以便快速访问元数据。在添加大文件时,该工作人员没有足够的内存来存储所有数据文件元数据。在这种情况下,您应该增加DiskPageBufferMemory或添加较小的表空间文件。您可能还需要进行调整 DiskPageBufferEntries

    您可以查询该 ndbinfo.diskpagebuffer 表以帮助确定是否应该增加此参数的值以尽量减少不必要的磁盘搜索。有关更多信息请参见 第21.5.10.20节“ndbinfo diskpagebuffer表”

  • SharedGlobalMemory

    表21.153该表提供了SharedGlobalMemory数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 128M
    范围 0 - 64T
    重新启动类型 ñ

    此参数确定用于日志缓冲区,磁盘操作(如页面请求和等待队列)以及表空间,日志文件组,UNDO文件和数据文件的元数据的内存量 共享全局内存池还提供用于满足UNDO_BUFFER_SIZEwith CREATE LOGFILE GROUPwith ALTER LOGFILE GROUP 语句使用 的内存需求的内存 ,其中包括通过设置InitialLogFileGroup 数据节点配置参数为此选项隐含的任何默认值 SharedGlobalMemory可以设置在 [ndbd][ndbd default]部分 config.ini 配置文件,并以字节为单位进行测量。

    默认值是128M

  • DiskIOThreadPool

    表21.154该表提供了DiskIOThreadPool数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 线程
    默认 2
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数确定用于磁盘数据文件访问的未绑定线程数。DiskIOThreadPool推出之前 ,每个磁盘数据文件都会产生一个线程,这可能会导致性能问题,特别是在使用非常大的数据文件时。有了 DiskIOThreadPool,您可以 - 例如 - 使用多个并行工作的线程访问单个大型数据文件。

    该参数仅适用于磁盘数据I / O线程。

    此参数的最佳值取决于您的硬件和配置,并且包含以下因素:

    • 磁盘数据文件的物理分布。  通过将数据文件,撤消日志文件和数据节点文件系统放置在单独的物理磁盘上,可以获得更好的性能。如果您使用部分或全部这些文件集执行此操作,则可以设置 DiskIOThreadPool 较高的值以启用单独的线程来处理每个磁盘上的文件。

    • 磁盘性能和类型。  磁盘数据文件处理可容纳的线程数也取决于磁盘的速度和吞吐量。更快的磁盘和更高的吞吐量允许更多的磁盘I / O线程。我们的测试结果表明,固态磁盘驱动器可以处理比传统磁盘更多的磁盘I / O线程,因此具有更高的值 DiskIOThreadPool

    该参数的默认值是2。

  • 磁盘数据文件系统参数。  以下列表中的参数可以将NDB群集磁盘数据文件放置在特定目录中,而无需使用符号链接。

    • FileSystemPathDD

      表21.155此表提供了FileSystemPathDD数据节点配置参数的类型和值信息

      属性
      版本(或更高版本) NDB 7.5.0
      类型或单位 文件名
      默认 [见文字]
      范围 ...
      重新启动类型

      如果指定了此参数,则将NDB群集磁盘数据数据文件和撤消日志文件放在指定的目录中。根据这些参数的说明,通过为,或两者指定值FileSystemPathDataFiles可以覆盖数据文件,撤消日志文件或两者 FileSystemPathUndoFiles通过在ADD DATAFILE一个CREATE TABLESPACEor ALTER TABLESPACE 语句子句中 指定一个路径,并通过在ADD UNDOFILE一个CREATE LOGFILE GROUPor ALTER LOGFILE GROUP 语句子句中 指定一个路径来取消日志文件,也可以重写数据文件 如果 FileSystemPathDD 没有被指定,然后 FileSystemPath 被使用。

      如果FileSystemPathDD 为给定数据节点指定了一个 目录(包括在[ndbd default]config.ini文件部分中 指定了参数的情况 ),那么启动该数据节点将--initial导致目录中的所有文件都被删除。

    • FileSystemPathDataFiles

      表21.156下表提供了FileSystemPathDataFiles数据节点配置参数的类型和值信息

      属性
      版本(或更高版本) NDB 7.5.0
      类型或单位 文件名
      默认 [见文字]
      范围 ...
      重新启动类型

      如果指定了此参数,则NDB群集磁盘数据数据文件将放置在指定的目录中。这将覆盖为其设置的任何值 FileSystemPathDD此参数可以通过在指定路径覆盖给定数据文件ADD DATAFILE的条款 CREATE TABLESPACEALTER TABLESPACE 语句来创建数据文件。如果 FileSystemPathDataFiles 未指定,则 FileSystemPathDD 使用(或者 FileSystemPath,如果 FileSystemPathDD 还没有设置)。

      如果FileSystemPathDataFiles 为给定数据节点指定了一个 目录(包括在[ndbd default]config.ini文件部分中 指定了参数的情况 ),那么启动该数据节点将--initial导致目录中的所有文件都被删除。

    • FileSystemPathUndoFiles

      表21.157该表提供了FileSystemPathUndoFiles数据节点配置参数的类型和值信息

      属性
      版本(或更高版本) NDB 7.5.0
      类型或单位 文件名
      默认 [见文字]
      范围 ...
      重新启动类型

      如果指定了此参数,则NDB集群磁盘数据撤消日志文件将被放置在指定的目录中。这将覆盖为其设置的任何值 FileSystemPathDD此参数可以通过在指定路径覆盖给定数据文件ADD UNDO 的条款CREATE LOGFILE GROUPALTER LOGFILE GROUP语句来创建数据文件。如果 FileSystemPathUndoFiles 未指定,则 FileSystemPathDD 使用(或者 FileSystemPath,如果 FileSystemPathDD 还没有设置)。

      如果FileSystemPathUndoFiles 为给定数据节点指定了一个 目录(包括在[ndbd default]config.ini文件部分中 指定了参数的情况 ),那么启动该数据节点将--initial导致该目录中的所有文件都被删除。

    有关更多信息,请参见 第21.5.13.1节“NDB群集磁盘数据对象”

  • 磁盘数据对象创建参数。  接下来的两个参数使您能够在第一次启动集群时使磁盘数据日志文件组,表空间或两者都创建而不使用SQL语句。

    • InitialLogFileGroup

      表21.158该表提供了InitialLogFileGroup数据节点配置参数的类型和值信息

      属性
      版本(或更高版本) NDB 7.5.0
      类型或单位
      默认 [见文字]
      范围 ...
      重新启动类型 小号

      此参数可用于指定在执行群集初始启动时创建的日志文件组。 InitialLogFileGroup 如下所示指定:

      InitialLogFileGroup = [name = name;] [undo_buffer_size = size;]file-specification-list
      
      file-specification-listfile-specification[; file-specification[; ...]
      
      file-specificationfilenamesize
      

      name日志文件组是可选的,默认为DEFAULT-LGundo_buffer_size也是可选的; 如果省略,则默认为 64M每个 file-specification 对应于撤消日志文件,并且至少必须在中指定一个 file-specification-list撤消日志文件是根据已设定的任何值放置 FileSystemPathFileSystemPathDDFileSystemPathUndoFiles,就好像他们已经作为的结果被创建 CREATE LOGFILE GROUPALTER LOGFILE GROUP 声明。

      考虑以下:

      InitialLogFileGroup = name = LG1; undo_buffer_size = 128M; undo1.log:250M; undo2.log:150M
      

      这相当于下面的SQL语句:

      创建日志文件组LG1
          ADD UNDOFILE'undo1.log'
          INITIAL_SIZE 250M
          UNDO_BUFFER_SIZE 128M
          ENGINE NDBCLUSTER;
      
      ALTER LOGFILE GROUP LG1
          ADD UNDOFILE'undo2.log'
          INITIAL_SIZE 150M
          ENGINE NDBCLUSTER;
      

      这个日志文件组是在数据节点启动时创建的--initial

      初始日志文件组的资源将与值的值一起添加到全局内存池中 SharedGlobalMemory

      此参数(如果使用)应始终[ndbd default]config.ini文件部分中 进行设置 未定义在不同数据节点上设置不同值时NDB群集的行为。

    • InitialTablespace

      表21.159此表提供了InitialTablespace数据节点配置参数的类型和值信息

      属性
      版本(或更高版本) NDB 7.5.0
      类型或单位
      默认 [见文字]
      范围 ...
      重新启动类型 小号

      此参数可用于指定在执行群集初始启动时创建的NDB群集磁盘数据表空间。 InitialTablespace 如下所示指定:

      InitialTablespace = [name = name;] [extent_size = size;]file-specification-list
      

      name表空间是可选的,默认为DEFAULT-TSextent_size也是可选的; 它默认为1Mfile-specification-list使用相同的语法如图所示与 InitialLogfileGroup 参数,唯一的区别是,每个 file-specification与用于 InitialTablespace 对应的数据文件。至少必须在一个中指定一个 file-specification-list数据文件是根据已设定的任何值放置 FileSystemPathFileSystemPathDDFileSystemPathDataFiles就好像它们是作为一个CREATE TABLESPACE一个ALTER TABLESPACE 语句的结果而创建的一样

      例如,考虑下面的行指定 InitialTablespace[ndbd default]所述的部分 config.ini文件(如 InitialLogfileGroup,该参数应该总是在设定 [ndbd default]部中,作为NDB簇时的行为不同的值不同的数据节点上设置没有定义):

      InitialTablespace = name = TS1; extent_size = 8M; data1.dat:2G; data2.dat:4G
      

      这相当于下面的SQL语句:

      CREATE TABLESPACE TS1
          ADD DATAFILE'data1.dat'
          EXTENT_SIZE 8M
          INITIAL_SIZE 2G
          ENGINE NDBCLUSTER;
      
      ALTER TABLESPACE TS1
          ADD DATAFILE'data2.dat'
          INITIAL_SIZE 4G
          ENGINE NDBCLUSTER;
      

      该表空间是在数据节点启动--initial时创建的,并且可以在以后创建NDB群集磁盘数据表时使用。

磁盘数据和GCP停止错误。  使用磁盘数据表(如节点)nodeid时遇到的错误 杀死了此节点,因为检测到GCP停止(错误2303)通常称为GCP停止错误当重做日志没有足够快地刷新到磁盘时会发生这种错误; 这通常是由于磁盘速度慢和磁盘吞吐量不足。

通过使用更快的磁盘并将磁盘数据文件放置在与数据节点文件系统不同的磁盘上,可以帮助防止发生这些错误。减少值 TimeBetweenGlobalCheckpoints 往往会减少要为每个全局检查点写入的数据量,因此可能在尝试写入全局检查点时防止重做日志缓冲区溢出; 然而,减小此值也可以减少编写GCP的时间,因此必须谨慎操作。

除了DiskPageBufferMemory前面所述的考虑事项外, DiskIOThreadPool 正确设置配置参数也非常重要 ; DiskIOThreadPool设置得太高,很容易造成GCP停止错误(错误#37227)。

GCP停止可能由保存或提交超时引起; TimeBetweenEpochsTimeout 数据节点的配置参数决定提交的超时。但是,可以通过将此参数设置为0来禁用这两种类型的超时。

配置发送缓冲区内存分配的参数。  发送缓冲存储器是从所有传送器之间共享的存储池中动态分配的,这意味着可以根据需要调整发送缓冲区的大小。(以前,NDB内核对群集中的每个节点都使用固定大小的发送缓冲区,该节点在节点启动时分配,并且在节点运行时不能更改。) TotalSendBufferMemoryOverLoadLimit数据节点配置参数允许设置限制在这个内存分配上。有关使用这些参数(以及SendBufferMemory)的更多信息 ,请参阅 第21.3.3.14节“配置NDB群集发送缓冲区参数”

另请参见第21.5.14节“在线添加NDB群集数据节点”

重做日志过度提交处理。  将重做日志刷新到磁盘时会花费太多时间来控制数据节点对操作的处理。当给定的重做日志刷新花费比RedoOverCommitLimit更长的RedoOverCommitCounter 时间,导致任何未决的事务中止时,会发生这种情况 发生这种情况时,发送事务的API节点可以处理应该通过对操作进行排队并重试它们或者通过中止它们来提交的操作,这由 DefaultOperationRedoProblemAction下面的列表描述了用于设置API节点采取此操作之前可能超出的超时时间和次数的数据节点配置参数:

  • RedoOverCommitCounter

    表21.160此表提供了RedoOverCommitCounter数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 3
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    RedoOverCommitLimit 试图将给定的重做日志写入磁盘多次或多次时,如果超过任何未作为结果提交的事务将被中止,并且发生这些事务中的任何一个的API节点处理组成这些事务的操作,根据它的价值 DefaultOperationRedoProblemAction (通过排队操作重新尝试,或放弃它们)。

    RedoOverCommitCounter 默认为3.将其设置为0可禁用限制。

  • RedoOverCommitLimit

    表21.161此表提供RedoOverCommitLimit数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 20
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数设置在超时之前尝试将给定重做日志写入磁盘的上限(以秒为单位)。数据节点尝试刷新此重做日志但要花费更长时间的次数将RedoOverCommitLimit保留并与其进行比较 RedoOverCommitCounter,并且当刷新花费的时间比该参数的值多得多时,任何未作为刷新超时被中止。发生这种情况时,发生这些事务的API节点会根据其DefaultOperationRedoProblemAction 设置处理组成这些事务 的操作(它将要重新尝试的操作排队,或将其中止)。

    默认情况下,RedoOverCommitLimit是20秒。设置为0可禁用检查重做日志刷新超时。

控制重启尝试。  这是可能他们失败时,开始使用行使在由数据节点重启尝试精细粒度的控制 MaxStartFailRetriesStartFailRetryDelay 数据节点的配置参数。

MaxStartFailRetries 限制在放弃启动数据节点前StartFailRetryDelay重新尝试的总次数, 设置重试尝试之间的秒数。这些参数在这里列出:

  • StartFailRetryDelay

    表21.162此表提供StartFailRetryDelay数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    使用此参数设置启动失败时数据节点重新启动尝试之间的秒数。默认值是0(不延迟)。

    MaxStartFailRetries 除非 该参数StopOnError等于0,否则这个参数 都将被忽略

  • MaxStartFailRetries

    表21.163此表提供了MaxStartFailRetries数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 3
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    使用此参数限制数据节点在启动失败时重新尝试重新尝试的次数。缺省值是3次尝试。

    StartFailRetryDelay 除非 该参数StopOnError等于0,否则这个参数 将被忽略

NDB索引统计参数。  以下列表中的参数与生成NDB索引统计信息相关。

  • IndexStatAutoCreate

    表21.164此表提供了IndexStatAutoCreate数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 错误,真实
    重新启动类型 小号

    在创建索引时启用或禁用自动统计信息收集。默认情况下禁用。

  • IndexStatAutoUpdate

    表21.165此表提供了IndexStatAutoUpdate数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 错误,真实
    重新启动类型 小号

    启用或禁用对变更索引的监视,并触发检测到这些更新的自动统计更新。触发更新所需更改的数量和程度取决于IndexStatTriggerPctIndexStatTriggerScale 选项的设置

  • IndexStatSaveSize

    表21.166此表提供了IndexStatSaveSize数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 32768
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型

    NDB 系统表和mysqld内存高速缓存中 的任何给定索引的已保存统计信息允许的最大空间(以字节为单位)这消耗 IndexMemory

    总是生成至少一个样本,不管任何大小限制。这个尺寸是按比例缩放的 IndexStatSaveScale

    指定的大小由 大索引IndexStatSaveSize的值缩放 IndexStatTriggerPct0.01倍。这进一步乘以索引大小的基数2的对数。设置 IndexStatTriggerPct等于0将禁用缩放效果。

  • IndexStatSaveScale

    表21.167此表提供了IndexStatSaveScale数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 百分比
    默认 100
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型

    指定的大小由 大索引IndexStatSaveSize的值缩放 IndexStatTriggerPct0.01倍。这进一步乘以索引大小的基数2的对数。设置 IndexStatTriggerPct等于0将禁用缩放效果。

  • IndexStatTriggerPct

    表21.168此表提供了IndexStatTriggerPct数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 百分比
    默认 100
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型

    触发索引统计信息更新的更新百分比更改。该值按比例缩放 IndexStatTriggerScale您可以通过设置IndexStatTriggerPct为0来完全禁用此触发器

  • IndexStatTriggerScale

    表21.169此表提供了IndexStatTriggerScale数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 百分比
    默认 100
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型

    尺度 IndexStatTriggerPct 由该量倍0.01对于大索引。值为0将禁用缩放。

  • IndexStatUpdateDelay

    表21.170此表提供了IndexStatUpdateDelay数据节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 60
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型

    指定索引的自动索引统计信息更新之间的最小延迟(秒)。将此变量设置为0将禁用任何延迟。默认值是60秒。

21.3.3.7在NDB集群中定义SQL和其他API节点

[mysqld][api] 部分中config.ini文件中定义的MySQL服务器(SQL节点)和其他应用程序(API节点)用于访问簇数据的行为。没有显示的参数是必需的。如果未提供计算机或主机名称,则任何主机均可使用此SQL或API节点。

一般来说,一[mysqld]节用于表示一个为群集提供SQL接口的MySQL服务器,另一[api]节用于除访问群集数据的mysqld进程以外的应用程序,但这两个名称实际上是同义的; 例如,您可以在一[api] 节中列出作为SQL节点的MySQL服务器的参数

注意

有关NDB集群的MySQL服务器选项的讨论,请参见 第21.3.3.9.1节“用于NDB集群的MySQL服务器选项”有关与NDB集群相关的MySQL服务器系统变量的信息,请参见 第21.3.3.9.2节“NDB集群系统变量”

  • Id

    表21.171此表提供了Id API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 1 - 255
    重新启动类型 IS

    Id是一个整数值,用于标识所有集群内部消息中的节点。允许的值范围是1到255(含)。无论节点类型如何,此值对于群集中的每个节点都必须是唯一的。

    注意

    无论使用的是NDB群集版本,数据节点ID都必须小于49。如果您计划部署大量数据节点,最好将API节点(和管理节点)的节点ID限制为大于48的值。

    NodeId是识别API节点时使用的首选参数名称。Id继续支持向后兼容性,但现在不推荐使用,并在使用时生成警告,也将在未来删除。)

  • ConnectionMap

    表21.172该表提供了ConnectionMap API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    指定要连接的数据节点。

  • NodeId

    表21.173该表提供NodeId API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 1 - 255
    重新启动类型 IS

    NodeId是一个整数值,用于标识所有集群内部消息中的节点。允许的值范围是1到255(含)。无论节点类型如何,此值对于群集中的每个节点都必须是唯一的。

    注意

    无论使用的是NDB群集版本,数据节点ID都必须小于49。如果您计划部署大量数据节点,最好将API节点(和管理节点)的节点ID限制为大于48的值。

    NodeId是识别管理节点时使用的首选参数名称。Id在非常旧的NDB集群版本中,别名是用于此目的的,并且继续支持向后兼容; 现在已被弃用,并在使用时产生警告,并可能在未来版本的NDB群集中删除。

  • ExecuteOnComputer

    表21.174此表提供了ExecuteOnComputer API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称
    默认 [没有]
    范围 ...
    重新启动类型 小号

    这是指 在配置文件Id[computer]一部分中定义的其中一台计算机(主机)的集合

    重要

    此参数自NDB 7.5.0起弃用,并且可能在未来版本中删除。改用该 HostName参数。

  • HostName

    表21.175此表提供了HostName API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称或IP地址
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    指定此参数可定义SQL节点(API节点)所驻留的计算机的主机名。要指定主机名,可以使用此参数或 ExecuteOnComputer必需。

    如果没有HostNameExecuteOnComputer在一个给定的被指定 [mysql][api] 所述的部分config.ini文件,然后SQL或API节点可以连接使用相应的 ,从它可以建立网络连接到管理服务器主机的任何主机。 这与数据节点的默认行为不同localhostHostName除非另有说明,否则假定其中的原因

  • LocationDomainId

    表21.176此表提供了LocationDomainId API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.6.4
    类型或单位 整数
    默认 0
    范围 0 - 16
    重新启动类型 小号

    将SQL或其他API节点分配到云中的特定 可用性域(也称为可用性区域)。通过通知NDB哪些节点位于哪些可用性域中,可以通过以下方式在云环境中提高性能:

    • 如果在同一节点上未找到所请求的数据,则可以将读取指向同一可用性域中的另一个节点。

    • 不同可用性域中的节点之间的通信保证使用NDB 传输器的WAN支持,而无需任何进一步的手动干预。

    • 传输器的组号可以基于使用哪个可用性域,以便SQL和其他API节点尽可能与同一可用性域中的本地数据节点通信。

    • 可以从没有数据节点的可用性域中选择仲裁器,或者从第三个可用域中选择仲裁器,如果没有找到这样的可用性域。

    LocationDomainId取0和16之间的整数值,其中0是默认值; 使用0与保留参数未设置相同。

  • ArbitrationRank

    表21.177此表提供了ArbitrationRank API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 0-2
    默认 0
    范围 0 - 2
    重新启动类型 ñ

    该参数定义哪些节点可以充当仲裁员。管理节点和SQL节点都可以是仲裁者。值为0意味着给定节点永远不会被用作仲裁器,值为1会赋予节点高优先级作为仲裁者,而值为2会赋予其低优先级。正常配置使用管理服务器作为仲裁者,将其设置ArbitrationRank为1(管理节点的默认值),将所有SQL节点的值设置为0(SQL节点的默认值)。

    通过ArbitrationRank在所有管理和SQL节点上设置为0,可以完全禁用仲裁。您也可以通过覆盖此参数来控制仲裁; 为此,请全局配置文件Arbitration[ndbd default]部分中设置 参数config.ini

  • ArbitrationDelay

    表21.178此表提供了ArbitrationDelay API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 毫秒
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    将此参数设置为除0之外的任何其他值(默认值)表示仲裁器对仲裁请求的响应将延迟指定的毫秒数。通常没有必要改变这个值。

  • BatchByteSize

    表21.179该表提供了BatchByteSize API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 16K
    范围 1K - 1M
    重新启动类型 ñ

    对于转换为索引中的全表扫描或范围扫描的查询,以正确大小的批处理获取记录的最佳性能很重要。可以根据记录数(BatchSize)和字节数(BatchByteSize来设置正确的大小实际的批量大小受到两个参数的限制。

    执行查询的速度可能会相差超过40%,具体取决于设置此参数的方式。

    该参数以字节为单位进行测量。默认值是16K。

  • BatchSize

    表21.180此表提供了BatchSize API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 记录
    默认 256
    范围 1 - 992
    重新启动类型 ñ

    此参数以记录数量度量,默认设置为256.最大值为992。

  • ExtraSendBufferMemory

    表21.181此表提供ExtraSendBufferMemory API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数指定转运发送缓冲存储器除了分配给已使用设置的任何的量 TotalSendBufferMemorySendBufferMemory或两者。

  • HeartbeatThreadPriority

    表21.182该表提供了HeartbeatThreadPriority API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 [没有]
    范围 ...
    重新启动类型 小号

    使用此参数为管理和API节点设置心跳线程的调度策略和优先级。此处显示设置此参数的语法:

    HeartbeatThreadPriority = policy[,priority]
    
    policy
      {FIFO | RR}
    

    设置此参数时,您必须指定一个策略。这是FIFO(先入先出)或 RR(循环赛)之一。这随后可以选择优先级(一个整数)。

  • MaxScanBatchSize

    表21.183此表提供了MaxScanBatchSize API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 256K
    范围 32K - 16M
    重新启动类型 ñ

    批量大小是每个数据节点发送的每个批次的大小。大多数扫描是并行执行的,以保护MySQL服务器免于从多个并行节点接收太多数据; 此参数为所有节点上的总批量大小设置限制。

    该参数的默认值设置为256KB。它的最大尺寸是16MB。

  • TotalSendBufferMemory

    表21.184该表提供了TotalSendBufferMemory API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 0
    范围 256K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    此参数用于确定在此节点上为所有已配置的传输器中的共享发送缓冲区内存分配的总内存量。

    如果设置了此参数,则其最小允许值为256KB; 0表示参数尚未设置。有关更多详细信息,请参见 第21.3.3.14节“配置NDB群集发送缓冲区参数”

  • AutoReconnect

    表21.185此表提供了AutoReconnect API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    这个参数是false默认的。这会强制断开连接的API节点(包括作为SQL节点的MySQL服务器)使用到集群的新连接,而不是试图重用现有节点,因为在使用动态分配的节点ID时重新使用连接可能会导致问题。(错误#45921)

    注意

    使用NDB API可以覆盖此参数。有关更多信息,请参见 Ndb_cluster_connection :: set_auto_reconnect()Ndb_cluster_connection :: get_auto_reconnect()

  • DefaultOperationRedoProblemAction

    表21.186该表提供了DefaultOperationRedoProblemAction API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 列举
    默认 队列
    范围 ABORT,QUEUE
    重新启动类型 小号

    此参数(和 RedoOverCommitLimit and RedoOverCommitCounter)控制数据节点在执行过多时间时将操作重做日志刷新到磁盘。当给定的重做日志刷新花费比RedoOverCommitLimit更长的RedoOverCommitCounter 时间,导致任何未决事务中止时,会发生这种情况

    发生这种情况时,根据以下DefaultOperationRedoProblemAction列出的值,节点可以采用以下两种方式之一进行响应

    • ABORT:任何来自中止事务的未决操作也会中止。

    • QUEUE:来自被中止的事务的挂起操作被排队等待重新尝试。这是默认值。当重做日志空间不足时,即使发生P_TAIL_PROBLEM错误,挂起的操作仍会中止

  • DefaultHashMapSize

    表21.187该表提供了DefaultHashMapSize API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 水桶
    默认 3840
    范围 0 - 3840
    重新启动类型 ñ

    使用的表哈希映射的大小 NDB可以使用此参数进行配置。DefaultHashMapSize可以采取三种可能的值中的任何一种(0,240,3840)。下表描述了这些值及其效果。

    表21.188 DefaultHashMapSize参数值

    描述/效果
    0 使用集群中所有数据节点和API节点中此参数的最小值集(如果有); 如果它未在任何数据或API节点上设置,请使用默认值。
    240 原始哈希映射大小(在NDB 7.2.7之前默认使用)。
    3840 更大的哈希映射大小(在NDB 7.2.7和更高版本中默认使用)

    此参数的原始用途是为了便于升级和降级到较旧的NDB群集版本,其中哈希映射大小不同,因为此更改不是向后兼容的。从NDB Cluster 7.5升级或降级时,这不是问题。

  • Wan

    表21.189该表提供了wan API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    默认使用WAN TCP设置。

  • ConnectBackoffMaxTime

    表21.190此表提供了ConnectBackoffMaxTime API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    在具有许多未启动的数据节点的NDB群集中,可以提高此参数的值以规避对尚未开始在群集中运行的数据节点的连接尝试,以及对管理节点的中等高流量。只要API节点未连接到任何新的数据节点,StartConnectBackoffMaxTime 就会应用参数的值 ; 否则, ConnectBackoffMaxTime用于确定连接尝试之间等待的时间长度(以毫秒为单位)。

    时间流逝过程中节点的连接尝试计算经过的时间这个参数时,没有考虑到。超时以约100 ms的分辨率应用,从100 ms延迟开始; 对于每个后续尝试,此周期的长度会加倍,直到达到 ConnectBackoffMaxTime毫秒,最长为100000毫秒(100秒)。

    一旦API节点连接到数据节点并且该节点报告(在心跳消息中)它已连接到其他数据节点,那么到这些数据节点的连接尝试不再受此参数的影响,并且此后每100毫秒直到连接。一旦数据节点启动后,就可以 HeartbeatIntervalDbApi 通知API节点通知发生了这种情况。

  • StartConnectBackoffMaxTime

    表21.191此表提供了StartConnectBackoffMaxTime API节点配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    在具有许多未启动的数据节点的NDB群集中,可以提高此参数的值以规避对尚未开始在群集中运行的数据节点的连接尝试,以及对管理节点的中等高流量。只要API节点未连接到任何新的数据节点,StartConnectBackoffMaxTime就会应用参数的值 ; 否则, ConnectBackoffMaxTime 用于确定连接尝试之间等待的时间长度(以毫秒为单位)。

    时间流逝过程中节点的连接尝试计算经过的时间这个参数时,没有考虑到。超时以约100 ms的分辨率应用,从100 ms延迟开始; 对于每个后续尝试,此周期的长度会加倍,直到达到 StartConnectBackoffMaxTime毫秒,最长为100000毫秒(100秒)。

    一旦API节点连接到数据节点并且该节点报告(在心跳消息中)它已连接到其他数据节点,那么到这些数据节点的连接尝试不再受此参数的影响,并且此后每100毫秒直到连接。一旦数据节点启动后,就可以 HeartbeatIntervalDbApi 通知API节点通知发生了这种情况。

API节点调试参数。  从NDB 7.5.2开始,您可以使用 ApiVerbose配置参数来启用来自给定API节点的调试输出。该参数采用整数值。0是默认值,并禁用此类调试; 1启用调试输出到集群日志; 2也增加了DBDICT调试输出。(错误#20638450)另请参见 DUMP 1229

您也可以从运行的使用NDB群集节点的SQL一个MySQL服务器的信息SHOW STATUSMySQL的客户端,如下所示:

MySQL的> SHOW STATUS LIKE 'ndb%';
+ ----------------------------- + ---------------- +
| 变量名| 值|
+ ----------------------------- + ---------------- +
| Ndb_cluster_node_id | 5 |
| Ndb_config_from_host | 198.51.100.112 |
| Ndb_config_from_port | 1186 |
| Ndb_number_of_storage_nodes | 4 |
+ ----------------------------- + ---------------- +
设置4行(0.02秒)

有关此语句输出中出现的状态变量的信息,请参见 第21.3.3.9.3节“NDB群集状态变量”

注意

要将新的SQL或API节点添加到正在运行的NDB群集的配置中,需要在向文件添加新[mysqld][api]之后执行所有节点的滚动重新启动config.ini(或者如果使用多个管理服务器,则需要文件) 。这必须在新的SQL或API节点可以连接到群集之前完成。

这是必要执行群集的任何重新启动,如果新的SQL或API节点可以使用以前未使用的API槽在群集配置以连接到群集。

21.3.3.8定义系统

[system]部分用于整体应用于集群的参数。Name系统参数与MySQL企业监控器; ConfigGenerationNumberPrimaryMGMNode没有在生产环境中使用。除了在MySQL企业监视器上使用NDB集群外,不需要[system]config.ini文件中有一个

有关这些参数的更多信息可以在以下列表中找到:

  • ConfigGenerationNumber

    表21.192该表提供了ConfigGenerationNumber系统配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    配置生成号码。该参数当前未使用。

  • Name

    表21.193该表提供了Name系统配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    为群集设置一个名称。使用MySQL Enterprise Monitor进行部署时,此参数是必需的; 否则它是未使用的。

  • PrimaryMGMNode

    表21.194该表提供了PrimaryMGMNode系统配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    主管理节点的节点ID。该参数当前未使用。

21.3.3.9 NDB集群的MySQL服务器选项和变量

本节提供有关特定于NDB群集的MySQL服务器选项,服务器和状态变量的信息。有关使用这些的一般信息,以及非NDB集群特有的其他选项和变量,请参见 第5.1节“MySQL服务器”

对于群集配置文件(通常命名config.ini)中使用的NDB群集配置参数 ,请参见 第21.3节“配置NDB群集”

21.3.3.9.1 NDB集群的MySQL服务器选项

本节提供有关NDB群集mysqld服务器选项的说明 有关 不是特定于NDB群集的mysqld选项的信息,以及有关使用mysqld选项的一般信息 ,请参见 第5.1.4节“服务器命令选项”

有关与其他NDB群集进程(ndbdndb_mgmdndb_mgm一起使用的命令行选项的信息,请参见第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”有关用于NDB实用程序(例如 ndb_descndb_size.plndb_show_tables)的命令行选项的信息 ,请参见 第21.4节“NDB群集程序”

  • --ndbcluster

    表21.195 ndbcluster的类型和值信息

    属性
    名称 ndbcluster
    命令行
    系统变量 没有
    状态变量 没有
    选项文件
    范围
    动态 没有
    类型
    默认值,范围(版本) FALSE(版本:NDB 7.5-7.6)
    笔记

    描述:启用NDB集群(如果此版本的MySQL支持它)。

    被禁用 --skip-ndbcluster


    NDBCLUSTER存储引擎是必要的使用NDB簇。如果一个 mysqld二进制文件包含对NDBCLUSTER存储引擎的支持 ,则该引擎默认是禁用的。使用该 --ndbcluster选项启用它。使用--skip-ndbcluster明确的禁止发动机。

    与此同时使用此选项是没有必要或不可取的--initialize如果也被使用,则从NDB 7.5.4开始,将--ndbcluster被忽略(并且NDB存储引擎 未被启用) --initialize(错误#81689,错误#23518923)

  • --ndb-allow-copying-alter-table=[ON|OFF]

    表21.196 ndb-allow-copying-alter-table的类型和值信息

    属性
    名称 ndb-allow-copying-alter-table
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) ON(版本:NDB 7.5-7.6)
    笔记

    描述:设置为OFF以防止ALTER TABLE在NDB表上使用复制操作。


    ALTER TABLE和其他DDL语句在NDB上使用复制操作 设置以 OFF防止这种情况发生; 这样做可能会提高关键应用程序的性能。

  • --ndb-batch-size=#

    表21.197 ndb-batch-size的类型和值信息

    属性
    名称 ndb-batch-size
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) 32768/0 - 31536000(版本:NDB 7.5-7.6)
    笔记

    描述:用于NDB事务批量的大小(以字节为单位)。


    这将设置用于NDB事务批处理的大小(以字节为单位)。

  • --ndb-cluster-connection-pool=#

    表21.198 ndb-cluster-connection-pool的类型和值信息

    属性
    名称 ndb-cluster-connection-pool
    命令行
    系统变量
    状态变量
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) 1/1 - 63(版本:NDB 7.5-7.6)
    笔记

    描述:MySQL使用的群集连接数。


    通过将此选项设置为大于1的值(默认值),mysqld进程可以使用到群集的多个连接,有效地模拟多个SQL节点。每个连接都需要 在集群配置()文件中拥有自己的 部分[api][mysqld]部分config.ini,并根据集群支持的最大API连接数进行计数。

    假设您有两台集群主机,每台主机运行一个SQL节点,其mysqld 进程已启动 --ndb-cluster-connection-pool=4; 这意味着群集必须有8个可用于这些连接的API插槽(而不是2个)。所有这些连接都在SQL节点连接到群集时设置,并以循环方式分配给线程。

    只有在具有多个CPU,多个核心或两者的主机上运行mysqld时,此选项才有 用。为获得最佳结果,该值应小于主机上可用的内核总数。将其设置为大于此值可能会严重降低性能。

    重要

    因为使用连接池的每个SQL节点占用多个API节点插槽(每个插槽在群集中都有自己的节点ID),所以 在启动任何使用连接池的mysqld进程时,不得使用节点ID作为群集连接字符串的一部分

    当使用该--ndb-cluster-connection-pool 选项时,在连接字符串中设置节点ID 会在SQL节点尝试连接到群集时导致节点ID分配错误。

  • --ndb-cluster-connection-pool-nodeids=list

    表21.199 ndb-cluster-connection-pool-nodeids的类型和值信息

    属性
    名称 ndb-cluster-connection-pool-nodeids
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) /(版本:NDB 7.5-7.6)
    笔记

    描述:连接到MySQL使用的集群的逗号分隔节点ID列表; 列表中的节点数量必须与为--ndb-cluster-connection-pool设置的值相同。


    指定SQL节点使用的群集连接的节点ID的逗号分隔列表。此列表中的节点数量必须与为该--ndb-cluster-connection-pool 选项设置的值相同

    --ndb-cluster-connection-pool-nodeids 被添加到NDB 7.5.0中。

  • --ndb-blob-read-batch-bytes=bytes

    表21.200 ndb-blob-read-batch-bytes的类型和值信息

    属性
    名称 ndb-blob-read-batch-bytes
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) 65536/0 - 4294967295(版本:NDB 7.5-7.6)
    笔记

    描述:指定大BLOB读取应该批量处理的大小(以字节为单位)。0 =没有限制..


    该选项可用于设置批量处理BLOBNDB群集应用程序数据读取的大小(以字节为单位)当此批量大小超过BLOB当前事务中要读取数据量时, BLOB将立即执行任何未决的 读取操作。

    此选项的最大值是4294967295; 默认值是65536.将其设置为0会禁用BLOB读取批处理。

    注意

    在NDB API应用程序中,可以BLOB使用setMaxPendingBlobReadBytes()getMaxPendingBlobReadBytes() 方法控制 写入批处理

  • --ndb-blob-write-batch-bytes=bytes

    表21.201 ndb-blob-write-batch-bytes的类型和值信息

    属性
    名称 ndb-blob-write-batch-bytes
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) 65536/0 - 4294967295(版本:NDB 7.5-7.6)
    笔记

    描述:指定大BLOB写入应该批量处理的大小(以字节为单位)。0 =没有限制..


    此选项可用于设置批量BLOBNDB群集应用程序数据写入的大小(以字节为单位)当此批量大小超过BLOB要写入当前事务数据量时, BLOB将立即执行任何挂起的 写入操作。

    此选项的最大值是4294967295; 默认值为65536.将其设置为0会禁用BLOB写入批处理。

    注意

    在NDB API应用程序中,可以BLOB使用setMaxPendingBlobWriteBytes()getMaxPendingBlobWriteBytes() 方法控制 写入批处理

  • --ndb-connectstring=connection_string

    表21.202 ndb-connectingtring的类型和值信息

    属性
    名称 ndb-connectstring
    命令行
    系统变量 没有
    状态变量 没有
    选项文件
    范围
    动态 没有
    类型
    默认值,范围(版本) (版本:NDB 7.5-7.6)
    笔记

    描述:指向分发群集配置的管理服务器。


    使用NDBCLUSTER 存储引擎时,此选项指定分发群集配置数据的管理服务器。有关语法,请参见 第21.3.3.3节“NDB群集连接字符串”

  • --ndb-default-column-format=[FIXED|DYNAMIC]

    表21.203 ndb-default-column-format的类型和值信息

    属性
    名称 ndb-default-column-format
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) DYNAMIC / FIXED,DYNAMIC(版本:5.7.11-ndb-7.5.1)
    默认值,范围(版本) FIXED / FIXED,DYNAMIC(版本:5.7.16-ndb-7.5.4)
    笔记

    描述:创建或向表中添加列时,默认情况下为COLUMN_FORMAT和ROW_FORMAT选项使用此值(FIXED或DYNAMIC)..


    在NDB 7.5.1和更高版本中,设置缺省值 COLUMN_FORMATROW_FORMAT新表(请参见 第13.1.18节“CREATE TABLE语法”)。

    在NDB 7.5.1中,这个选项的默认值是 DYNAMIC; 在NDB 7.5.4中,默认情况已更改为FIXED与旧版本系列保持向后兼容(Bug#24487363)。

  • --ndb-deferred-constraints=[0|1]

    表21.204 ndb-deferred-constraints的类型和值信息

    属性
    名称 ndb-deferred-constraints
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) 0/0 - 1(版本:NDB 7.5-7.6)
    笔记

    说明:指定对唯一索引(支持这些索引的位置)的约束检查应推迟到提交时间。通常不需要或使用; 仅用于测试目的..


    控制对唯一索引的约束检查是否延迟到提交时间,并支持此类检查。0是默认值。

    操作NDB群集或NDB群集复制通常不需要此选项,主要用于测试。

  • --ndb-distribution=[KEYHASH|LINHASH]

    表21.205 ndb分发的类型和值信息

    属性
    名称 ndb-distribution
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) KEYHASH / LINHASH,KEYHASH(版本:NDB 7.5-7.6)
    笔记

    描述:NDBCLUSTER中新表的默认分配(KEYHASH或LINHASH,默认为KEYHASH)。


    控制NDB表格的默认分配方法 可以设置为KEYHASH(密钥散列)或 LINHASH(线性散列)。 KEYHASH是默认值。

  • --ndb-log-apply-status

    表21.206 ndb-log-apply-status的类型和值信息

    属性
    名称 ndb-log-apply-status
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:使用它自己的服务器ID,使MySQL服务器充当从服务器,以便从其直接主服务器接收到的从其主服务器接收到的mysql.ndb_apply_status更新。仅当服务器使用--ndbcluster选项启动时才有效。


    使从属mysqldmysql.ndb_apply_status使用自己的服务器标识而不是主服务器标识将从其直接主服务器收到的任何更新记录到其自己的二进制日志中表中。在循环或链式复制设置中,这允许将这些更新传播到mysql.ndb_apply_status任何配置为当前mysqld的奴隶的MySQL服务器表中

    在链式复制设置中,使用此选项可使下游(从属)群集知道它们相对于其所有上游贡献者(主人)的位置。

    在循环复制设置中,此选项会导致ndb_apply_status更改完成整个电路,最终传播回原始NDB群集。这也允许作为主服务器的集群查看其更改(时代)何时应用于该圆中的其他集群。

    除非MySQL服务器使用该--ndbcluster选项启动,否则此选项无效

  • --ndb-log-empty-epochs=[ON|OFF]

    表21.207 ndb-log-empty-epoch的类型和值信息

    属性
    名称 ndb-log-empty-epochs
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:启用时,即使启用了--log-slave-updates,也会将没有更改的时代写入ndb_apply_status和ndb_binlog_index表。


    原因在这期间没有变化写入时代ndb_apply_statusndb_binlog_index表,即使 --log-slave-updates被启用。

    默认情况下,此选项被禁用。禁用 --ndb-log-empty-epochs会导致没有更改的纪元事务不会被写入二进制日志,尽管即使对于一个空的纪元,行仍然被写入ndb_binlog_index

    由于--ndb-log-empty-epochs=1导致ndb_binlog_index表的大小与二进制日志的大小无关地增加,因此即使用户期望群集在很大一部分时间处于闲置状态,用户仍应准备好管理此表的增长。

  • --ndb-log-empty-update=[ON|OFF]

    表21.208 ndb-log-empty-update的类型和值信息

    属性
    名称 ndb-log-empty-update
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:启用时,即使启用了--log-slave-updates,也会导致没有发生任何更改的更新写入ndb_apply_status和ndb_binlog_index表。


    导致没有更改写入到ndb_apply_statusndb_binlog_index表中的更新,即使 --log-slave-updates启用。

    默认情况下,该选项被禁用(OFF)。禁用 --ndb-log-empty-update导致没有更改的更新不会被写入二进制日志。

  • --ndb-log-exclusive-reads=[0|1]

    表21.209 ndb-log-exclusive-reads的类型和值信息

    属性
    名称 ndb-log-exclusive-reads
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) 0(版本:NDB 7.5-7.6)
    笔记

    描述:用独占锁来记录主键读取; 根据读取冲突允许冲突解决。


    使用此选项启动服务器会导致使用排它锁对主键读取进行记录,从而允许基于读取冲突进行NDB群集复制冲突检测和解决。您也可以通过ndb_log_exclusive_reads 分别系统变量的值设置为1或0来在运行时启用和禁用这些锁 0(禁用锁定)是默认值。

    有关更多信息,请参阅 读取冲突检测和解决

  • --ndb-log-orig

    表21.210 ndb-log-orig的类型和值信息

    属性
    名称 ndb-log-orig
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:在mysql.ndb_binlog_index表中记录始发服务器id和时期。


    ndb_binlog_index表格中记录始发服务器ID和纪元

    注意

    这使得给定时期可能有多个行ndb_binlog_index,每个始发时期一个。

    有关更多信息,请参见 第21.6.4节“NDB群集复制架构和表”

  • --ndb-log-transaction-id

    表21.211 ndb-log-transaction-id的类型和值信息

    属性
    名称 ndb-log-transaction-id
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:在二进制日志中写入NDB事务ID。需要--log-bin-v1-events = OFF ..


    导致从属mysqld在二进制日志的每一行中写入NDB事务ID。这种日志记录要求使用版本2事件格式作为二进制日志; 因此, --log-bin-use-v1-row-events 必须设置FALSE为使用此选项。

    主线MySQL Server 5.7不支持此选项。需要使用该NDB$EPOCH_TRANS()功能启用NDB群集复制冲突检测和解析 (请参阅 NDB $ EPOCH_TRANS())。

    默认值是FALSE

    有关更多信息,请参见 第21.6.11节“NDB群集复制冲突解决”

  • --ndb-log-update-minimal

    表21.212 ndb-log-update-minimal的类型和值信息

    属性
    名称 ndb-log-update-minimal
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) OFF(版本:5.6.36-ndb-7.4.16)
    默认值,范围(版本) OFF(版本:5.7.18-ndb-7.5.7)
    默认值,范围(版本) OFF(版本:5.7.18-ndb-7.6.3)
    笔记

    描述:以最小格式记录更新


    以最简单的方式记录更新,只写入前图像中的主键值,以及仅后图像中更改的列。如果复制到存储引擎以外,这可能会导致兼容性问题NDB

  • --ndb-mgmd-host=host[:port]

    表21.213 ndb-mgmd-host的类型和值信息

    属性
    名称 ndb-mgmd-host
    命令行
    系统变量 没有
    状态变量 没有
    选项文件
    范围
    动态 没有
    类型
    默认值,范围(版本) localhost:1186(版本:NDB 7.5-7.6)
    笔记

    描述:设置主机(和端口,如果需要)以连接到管理服务器。


    可用于设置程序要连接的单个管理服务器的主机和端口号。如果程序在其连接信息中需要节点ID或对多个管理服务器(或两者)的引用,请改用该 --ndb-connectstring选项。

  • --ndb-nodeid=#

    表21.214 ndb-nodeid的类型和值信息

    属性
    名称 ndb-nodeid
    命令行
    系统变量 没有
    状态变量
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) / 1 - 63(Version:5.0.45)
    默认值,范围(版本) / 1 - 255(版本:5.1.5)
    笔记

    描述:这个MySQL服务器的NDB群集节点ID。


    在NDB集群中设置此MySQL服务器的节点ID。

    无论使用两个选项的顺序如何,--ndb-nodeid选项都将覆盖设置的任何节点标识 --ndb-connectstring

    另外,如果--ndb-nodeid被使用,则匹配的节点ID必须位于一个 [mysqld][api] 一部分中config.ini,或者文件中必须有一个打开 [mysqld][api]节(即没有指定NodeIdId参数的节)。如果节点ID被指定为连接字符串的一部分,则也是如此。

    无论如何确定节点ID,其显示为Ndb_cluster_node_id输出中的全局状态变量的值SHOW STATUS,以及 输出 cluster_node_idconnection行中的 全局状态变量的值 SHOW ENGINE NDBCLUSTER STATUS

    有关NDB Cluster SQL节点的节点ID的更多信息,请参见第21.3.3.7节“在NDB集群中定义SQL和其他API节点”

  • --ndb_optimization_delay=milliseconds

    表21.215 ndb_optimization_delay的类型和值信息

    属性
    名称 ndb_optimization_delay
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 全球
    动态
    类型
    默认值,范围(版本) 10/0 - 100000(版本:NDB 7.5-7.6)
    笔记

    说明:通过NDB表上的OPTIMIZE TABLE设置在处理各组行之间等待的毫秒数。


    通过OPTIMIZE TABLE 表上语句设置要在几组行之间等待的毫秒数NDB默认值是10。

  • --ndb-recv-thread-activation-threshold=threshold

    表21.216 ndb-recv-thread-activation-threshold的类型和值信息

    属性
    名称 ndb-recv-thread-activation-threshold
    命令行
    系统变量 没有
    状态变量 没有
    选项文件
    范围
    动态 没有
    类型
    默认值,范围(版本) 8/0(MIN_ACTIVATION_THRESHOLD) - 16(MAX_ACTIVATION_THRESHOLD)(版本:5.6.10-ndb-7.3.1)
    笔记

    描述:当接收线程接管群集连接的轮询(在并发活动线程中测量)时的激活阈值。


    当达到此并发活动线程数时,接收线程接管轮询群集连接。

  • --ndb-recv-thread-cpu-mask=bitmask

    表21.217 ndb-recv-thread-cpu-mask的类型和值信息

    属性
    名称 ndb-recv-thread-cpu-mask
    命令行
    系统变量 没有
    状态变量 没有
    选项文件
    范围
    动态 没有
    类型
    默认值,范围(版本) [空](版本:NDB 7.5-7.6)
    笔记

    描述:用于将接收器线程锁定到特定CPU的CPU掩码; 指定为十六进制。详情请参阅文档..


    设置用于将接收器线程锁定到特定CPU的CPU掩码。这被指定为十六进制位掩码; 例如,0x33意味着每个接收器线程使用一个CPU。一个空字符串(不锁定接收者线程)是默认的。

  • ndb-transid-mysql-connection-map=state

    表21.218 ndb-transid-mysql-connection-map的类型和值信息

    属性
    名称 ndb-transid-mysql-connection-map
    命令行
    系统变量 没有
    状态变量 没有
    选项文件 没有
    范围
    动态 没有
    类型
    默认值,范围(版本) ON / ON,OFF,FORCE(版本:NDB 7.5-7.6)
    笔记

    描述:启用或禁用ndb_transid_mysql_connection_map插件; 即启用或禁用具有该名称的INFORMATION_SCHEMA表。


    启用或禁用处理 数据库ndb_transid_mysql_connection_map 中表的插件 INFORMATION_SCHEMA所采用的值中的一个ONOFFFORCEON(默认)启用插件。 OFF禁用插件,这使得 ndb_transid_mysql_connection_map 无法访问。FORCE如果插件无法加载并启动,则不会启动MySQL服务器。

    您可以 ndb_transid_mysql_connection_map 通过检查输出来查看表插件是否正在运行 SHOW PLUGINS

  • --ndb-wait-connected=seconds

    表21.219 ndb-wait-connected的类型和值信息

    属性
    名称 ndb-wait-connected
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) 0/0 - 31536000(版本:NDB 7.5-7.6)
    默认值,范围(版本) 30/0 - 31536000(版本:5.1.56-ndb-7.0.27)
    默认值,范围(版本) 0/0 - 31536000(版本:NDB 7.5-7.6)
    默认值,范围(版本) 30/0 - 31536000(版本:5.1.56 -ndb-7.1.16)
    笔记

    描述:MySQL服务器在接受MySQL客户端连接之前等待连接到集群管理和数据节点的时间(以秒为单位)。


    该选项设置MySQL服务器在接受MySQL客户端连接之前等待连接到NDB集群管理和数据节点的时间。时间以秒为单位指定。默认值是30

  • --ndb-wait-setup=seconds

    表21.220 ndb-wait-setup的类型和值信息

    属性
    名称 ndb-wait-setup
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) 15/0 - 31536000(版本:5.1.39 -ndb-6.2.19)
    默认值,范围(版本) 15/0 - 31536000(版本:5.1.39-ndb-6.3.28)
    默认值,范围(版本) 15/0 - 31536000(版本:5.1.39 -ndb-7.0.9)
    默认值,范围(版本) 30/0 - 31536000(版本:5.1.56-ndb-7.0.27)
    默认值,范围(版本) 15/0 - 31536000(版本:5.1.39-ndb-7.1.0)
    默认值,范围(版本) 30/0 - 31536000(版本:5.1.56 -ndb-7.1.16)
    笔记

    描述:MySQL服务器等待NDB引擎安装完成的时间(以秒为单位)。


    此变量显示MySQL服务器NDB 在超时并将其NDB视为不可用之前等待存储引擎完成设置的时间段时间以秒为单位指定。默认值是 30

  • --server-id-bits=#

    表21.221服务器ID位的类型和值信息

    属性
    名称 server-id-bits
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) 32/7 - 32(版本:NDB 7.5-7.6)
    笔记

    描述:设置实际用于标识服务器的server_id中最低有效位的数量,允许NDB API应用程序将应用程序数据存储在最高有效位中。server_id必须小于2才能达到此值。


    该选项指示server_id实际标识服务器的32位内的最低有效位数 表示服务器实际上是由少于32个比特识别使得能够对一些剩余位被用于其它目的,例如存储由使用内的NDB API的事件的API的应用程序生成的用户数据 AnyValue的的 OperationOptions 结构(NDB簇使用该 AnyValue来存储服务器ID)。

    server_id诸如检测复制循环等目的中提取有效的服务器标识时 ,服务器将忽略剩余的位。--server-id-bits 选项用于server_id在根据服务器标识确定是否应忽略事件时,屏蔽掉IO和SQL线程中的任何不相关的位

    这些数据可以通过mysqlbinlog从二进制日志中读取 ,只要它以自己的 --server-id-bits 选项设置为32(默认值)运行。

    server_id 必须小于2 ^ server_id_bits; 否则,mysqld拒绝启动。

    该系统变量仅由NDB群集支持。它在标准的MySQL 5.7服务器中不受支持。

  • --skip-ndbcluster

    表21.222 skip-ndbcluster的类型和值信息

    属性
    名称 skip-ndbcluster
    命令行
    系统变量 没有
    状态变量 没有
    选项文件
    范围
    动态 没有
    类型
    笔记

    描述:禁用NDB集群存储引擎。


    禁用NDBCLUSTER 存储引擎。这是使用NDBCLUSTER存储引擎支持构建的二进制文件的默认值; 只有在--ndbcluster显式给出选项时,服务器才会为此存储引擎分配内存和其他资源 有关示例,请参见 第21.3.1节“NDB群集的快速测试设置”

21.3.3.9.2 NDB群集系统变量

本节提供有关特定于NDB群集和NDB存储引擎的MySQL服务器系统变量的详细信息 对于不特定于NDB群集的系统变量,请参见 第5.1.5节“服务器系统变量”有关使用系统变量的一般信息,请参见 第5.1.6节“使用系统变量”

  • ndb_autoincrement_prefetch_sz

    表21.223 ndb_autoincrement_prefetch_sz的类型和值信息

    属性
    名称 ndb_autoincrement_prefetch_sz
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) 32/1 - 256(版本:NDB 7.5-7.6)
    默认值,范围(版本) 1/1 - 256(Version:5.0.56)
    默认值,范围(版本) 32/1 - 256(版本:5.1.1)
    默认值,范围(版本) 1/1 - 256(版本:5.1.23)
    默认值,范围(版本) 32/1 - 256(版本:5.1.16-ndb-6.2.0)
    默认值,范围(版本) 1/1 - 256(版本:5.1.23-ndb-6.2.10)
    默认值,范围(版本) 32/1 - 256(版本:5.1.19-ndb-6.3.0)
    默认值,范围(版本) 1/1 - 256(版本:5.1.23-ndb-6.3.7)
    默认值,范围(版本) 1/1 - 65536(版本:5.1.41 -ndb-6.3.31)
    默认值,范围(版本) 32/1 - 256(版本:5.1.30-ndb-6.4.0)
    默认值,范围(版本) 1/1 - 65536(版本:5.1.41 -ndb-7.0.11)
    默认值,范围(版本) 1/1 - 65536(版本:5.5.15-ndb-7.2.1)
    笔记

    描述:NDB自动增加预取大小。


    确定自动增量列中的间隔的概率。将其设置1为将此最小化。将其设置为较高的优化值可以使插入速度更快,但会降低连续自动增量编号在批次插入中使用的可能性。最小值和默认值为1.最大值为 ndb_autoincrement_prefetch_sz65536。

    该变量仅影响AUTO_INCREMENT语句之间获取ID 的数量 ; 在给定的声明中,每次至少获得32个ID。默认值是1。

    重要

    此变量不影响使用的插入 INSERT ... SELECT

  • ndb_cache_check_time

    表21.224 ndb_cache_check_time的类型和值信息

    属性
    名称 ndb_cache_check_time
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) 0 / - (版本:NDB 7.5-7.6)
    笔记

    描述:由MySQL查询缓存对集群SQL节点进行检查之间的毫秒数。


    MySQL查询缓存检查NDB Cluster SQL节点之间经过的毫秒数。将其设置为0(默认值和最小值)意味着查询缓存会检查每个查询的验证。

    该变量的建议最大值为1000,这意味着该检查每秒执行一次。值越大意味着由于不常使用不同SQL节点上的更新,所以执行检查并可能失效。通常不希望将其设置为大于2000的值。

    注意

    查询缓存从MySQL 5.7.20开始已弃用,并在MySQL 8.0中删除。弃用包括 ndb_cache_check_time

  • ndb_clear_apply_status

    表21.225 ndb_clear_apply_status的类型和值信息

    属性
    名称 ndb_clear_apply_status
    命令行
    系统变量
    状态变量 没有
    选项文件 没有
    范围 全球
    动态
    类型
    默认值,范围(版本) ON(版本:NDB 7.5-7.6)
    笔记

    描述:导致RESET SLAVE清除ndb_apply_status表中的所有行; 默认开启。


    默认情况下,执行RESET SLAVE会导致NDB群集复制从服务器清除其ndb_apply_status表中的所有行 您可以通过设置禁用此功能 ndb_clear_apply_status=OFF

  • ndb_data_node_neighbour

    表21.226 ndb_data_node_neighbour的类型和值信息

    属性
    名称 ndb_data_node_neighbour
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) 0/0 - 255(版本:5.7.12-ndb-7.5.2)
    笔记

    描述:指定与此MySQL服务器“最接近”的集群数据节点,用于事务提示和完全复制的表。


    设置最近数据节点的ID - 即选择首选的非本地数据节点来执行事务,而不是与SQL或API节点在同一主机上运行的节点。这用于确保访问完全复制的表时,我们在此数据节点上访问它,以确保始终尽可能使用表的本地副本。这也可以用于提供交易提示。

    这可以提高数据访问时间,在物理上比同一主机上的其他节点距离更近且因此具有更高网络吞吐量的节点的情况下。

    有关更多信息请参见 第13.1.18.10节“设置NDB_TABLE选项”

    在NDB 7.5.2中添加。

    注意

    set_data_node_neighbour() NDB API应用程序提供了 一个等效的方法

  • ndb_default_column_format

    表21.227 ndb_default_column_format的类型和值信息

    属性
    名称 ndb_default_column_format
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) DYNAMIC / FIXED,DYNAMIC(版本:5.7.11-ndb-7.5.1)
    默认值,范围(版本) FIXED / FIXED,DYNAMIC(版本:5.7.16-ndb-7.5.4)
    笔记

    描述:设置用于新NDB表格的默认行格式和列格式(FIXED或DYNAMIC)。


    在NDB 7.5.1和更高版本中,设置缺省值 COLUMN_FORMATROW_FORMAT新表(请参见 第13.1.18节“CREATE TABLE语法”)。

    在NDB 7.5.1中,这个变量的默认值是 DYNAMIC; 在NDB 7.5.4中,默认情况已更改为FIXED与旧版本系列保持向后兼容(Bug#24487363)。

  • ndb_deferred_constraints

    表21.228 ndb_deferred_constraints的类型和值信息

    属性
    名称 ndb_deferred_constraints
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) 0/0 - 1(版本:NDB 7.5-7.6)
    笔记

    描述:指定应该延迟约束检查(支持这些检查)。通常不需要或使用; 仅用于测试目的..


    控制是否延迟支持检查,如果支持这些检查。0是默认值。

    操作NDB群集或NDB群集复制通常不需要此变量,主要用于测试。

  • ndb_distribution

    表21.229 ndb_distribution的类型和值信息

    属性
    名称 ndb_distribution
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) KEYHASH / LINHASH,KEYHASH(版本:NDB 7.5-7.6)
    笔记

    描述:NDBCLUSTER中新表的默认分配(KEYHASH或LINHASH,默认为KEYHASH)。


    控制NDB表格的默认分配方法 可以设置为KEYHASH(密钥散列)或 LINHASH(线性散列)。 KEYHASH是默认值。

  • ndb_eventbuffer_free_percent

    表21.230 ndb_eventbuffer_free_percent的类型和值信息

    属性
    名称 ndb_eventbuffer_free_percent
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) 20/1 - 99(版本:NDB 7.5-7.6)
    笔记

    描述:在达到由ndb_eventbuffer_max_alloc设置的限制之后,在恢复缓冲之前应该在事件缓冲区中可用的空闲内存的百分比。


    设置分配给事件缓冲区(ndb_eventbuffer_max_alloc)的最大内存在达到最大值后应该在事件缓冲区中可用的百分比,然后再次开始缓冲。

  • ndb_eventbuffer_max_alloc

    表21.231 ndb_eventbuffer_max_alloc的类型和值信息

    属性
    名称 ndb_eventbuffer_max_alloc
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) 0/0 - 4294967295(版本:NDB 7.5-7.6)
    笔记

    描述:可由NDB API分配给缓冲事件的最大内存。默认为0(无限制)..


    设置可由NDB API分配给缓冲事件的最大内存量(以字节为单位)。0表示没有限制,是默认值。

  • ndb_extra_logging

    表21.232 ndb_extra_logging的类型和值信息

    属性
    名称 ndb_extra_logging
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) 0 / - (版本:NDB 7.5-7.6)
    默认值,范围(版本) 1 / - (版本:5.1.19-ndb-6.3.0)
    笔记

    说明:控制MySQL错误日志中的NDB集群模式,连接和数据分布事件的日志记录。


    此变量可以在MySQL错误日志中记录特定于 NDB存储引擎的信息。

    当这个变量设置为0时,只有特定的信息NDB被写入到MySQL错误日志中才涉及事务处理。如果它设置为大于0但小于10的值, NDB则会同时记录表模式和连接事件,以及是否使用冲突解决方案以及其他NDB 错误和信息。如果该值设置为10或更大,则有关NDB内部信息(如群集节点间数据分配的进度)也会写入MySQL错误日志。默认值是1。

  • ndb_force_send

    表21.233 ndb_force_send的类型和值信息

    属性
    名称 ndb_force_send
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) TRUE(版本:NDB 7.5-7.6)
    笔记

    说明:强制立即将缓冲区发送到NDB,而无需等待其他线程。


    强制NDB立即发送缓冲区 ,而无需等待其他线程。默认为 ON

  • ndb_fully_replicated

    表21.234 ndb_fully_replicated的类型和值信息

    属性
    名称 ndb_fully_replicated
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) OFF(版本:5.7.12-ndb-7-5-2)
    笔记

    描述:新的NDB表是否被完全复制。


    确定新NDB是否已完全复制。对于COMMENT="NDB_TABLE=FULLY_REPLICATED=..." 在a CREATE TABLEALTER TABLE语句中使用的单个表,可以覆盖此设置 ; 有关语法和其他信息,请参见 第13.1.18.10节“设置NDB_TABLE选项”

    在NDB 7.5.2中添加。

  • ndb_index_stat_enable

    表21.235 ndb_index_stat_enable的类型和值信息

    属性
    名称 ndb_index_stat_enable
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    默认值,范围(版本) ON(版本:5.5.15-ndb-7.2.1)
    笔记

    描述:在查询优化中使用NDB索引统计信息。


    NDB在查询优化中 使用索引统计。默认是ON

  • ndb_index_stat_option

    表21.236 ndb_index_stat_option的类型和值信息

    属性
    名称 ndb_index_stat_option
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) loop_enable = 1000ms,loop_idle = 1000ms,loop_busy = 100ms,update_batch = 1,read_batch = 4,idle_batch = 32,check_batch = 8,check_delay = 10m,delete_batch = 8,clean_delay = 1m,error_batch = 4,error_delay = 1m,evict_batch = 8,evict_delay = 1m,cache_limit = 32M,cache_lowpct = 90,zero_total = 0(版本:NDB 7.5-7.6)
    默认值,范围(版本) loop_checkon = 1000ms,loop_idle = 1000ms,loop_busy = 100ms,update_batch = 1,read_batch = 4,idle_batch = 32,check_batch = 32,check_delay = 1m,delete_batch = 8,clean_delay = 0,error_batch = 4,error_delay = 1m,evict_batch = 8,evict_delay = 1m,cache_limit = 32M,cache_lowpct = 90(版本:5.1.56-ndb-7.1.17)
    笔记

    描述:用于NDB索引统计的逗号分隔可调选项列表; 该列表不应包含空格。


    该变量用于为NDB索引统计信息生成提供调整选项。该列表由逗号分隔的名称和值对的选项名称和值组成,并且此列表不能包含任何空格字符。

    设置时未使用的选项没有 ndb_index_stat_option从默认值更改。例如,你可以设置 ndb_index_stat_option = 'loop_idle=1000ms,cache_limit=32M'

    时间值可以选择后缀 h(小时),m (分钟)或s(秒)。毫秒值可以选择使用 ms; 毫秒值不能使用指定hms。)整数的值可以与后缀KMG

    下面的表格中显示了可以使用此变量设置的选项的名称。该表还提供了选项,它们的默认值以及(如果适用)其最小值和最大值的简要说明。

    表21.237 ndb_index_stat_option选项和值

    名称 描述 默认/单位 最小/最大
    loop_enable 1000毫秒 0 / 4G
    loop_idle 闲置时睡觉 1000毫秒 0 / 4G
    loop_busy 有更多工作在等待的时候睡觉 100毫秒 0 / 4G
    update_batch 1 0 / 4G
    read_batch 4 1 / 4G
    idle_batch 32 1 / 4G
    check_batch 8 1 / 4G
    check_delay 多久检查一次新的统计数据 10米 1 / 4G
    delete_batch 8 0 / 4G
    clean_delay 1米 0 / 4G
    error_batch 4 1 / 4G
    error_delay 1米 1 / 4G
    evict_batch 8 1 / 4G
    evict_delay 从读取时间清理LRU缓存 1米 0 / 4G
    cache_limit mysqld用于缓存索引统计信息的最大内存量(以字节为单位); 超过这个时清理缓存。 32米 0 / 4G
    cache_lowpct 90 0/100
    zero_total 将此值设置为1会将所有累计计数器重置 ndb_index_stat_status为0.此选项值也会在完成时重置为0。 0 0/1

  • ndb_join_pushdown

    表21.238 ndb_join_pushdown的类型和值信息

    属性
    名称 ndb_join_pushdown
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围
    动态
    类型
    默认值,范围(版本) TRUE(版本:5.1.51-ndb-7.2.0)
    笔记

    描述:启用向数据节点的连接按下。


    该变量控制是否将NDB表上的连接 下推到NDB内核(数据节点)。以前,连接是NDB通过SQL节点的多次访问来处理的 ; 但是,ndb_join_pushdown启用时,可以将可推式连接全部发送到数据节点,在数据节点中它可以在数据节点之间分布,并在多个数据副本上并行执行,并将单个合并结果返回给 mysqld这可以大大减少SQL节点和处理这种连接所需的数据节点之间的往返次数。

    默认情况下, ndb_join_pushdown已启用。

    NDB下推连接的条件。  为了使连接可以被推动,它必须满足以下条件:

    1. 只能对列进行比较,并且所有要连接的列必须使用完全相同的数据类型。

      这意味着诸如 不能下推的表达式,并且(例如)列和 上的连接也不能被下压。 t1.a = t2.a + constantINTBIGINT

    2. 查询引用 BLOBTEXT列不受支持。

    3. 显式锁定不受支持; 但是, NDB存储引擎特有的基于行的行锁定是强制执行的。

      这意味着使用连接FOR UPDATE不能被推下。

    4. 为了使加盟下推,在加入子表必须使用的一个访问 refeq_ref或  const 访问方法,或这些方法的一些组合。

      外连接的子表只能使用推送 eq_ref

      如果推送连接的根是 eq_refconst,则只能eq_ref附加由连接的子表 (连接的表 ref可能成为另一个推送连接的根。)

      如果查询优化器决定Using join cache候选子表,那么该表不能作为孩子推送。但是,它可能是另一组推送表的根。

    5. 加入引用通过明确分区表 [LINEAR] HASHLISTRANGE 目前尚无法下推。

    您可以通过检查给定的联接来查看是否可以推送给定的联接EXPLAIN; 当连接可以按下时,您可以在输出pushed joinExtra列中看到对该连接的引用,如以下示例所示:

    mysql> EXPLAIN
        - >      SELECT e.first_name, e.last_name, t.title, d.dept_name
        - >          FROM employees e
        - >          JOIN dept_emp de ON e.emp_no=de.emp_no
        - >          JOIN departments d ON d.dept_no=de.dept_no
        - >         JOIN titles t ON e.emp_no=t.emp_no\G
    *************************** 1. row ******************** *******
               ID:1
      select_type:SIMPLE
            表:d
             键入:ALL
    possible_keys:PRIMARY
              键:NULL
          key_len:NULL
              ref:NULL
             行:9
            额外:4的父母推入连接@ 1
    *************************** 2. row ******************** *******
               ID:1
      select_type:SIMPLE
            表:德
             键入:ref
    possible_keys:PRIMARY,emp_no,dept_no
              键:dept_no
          key_len:4
              ref:employees.d.dept_no
             行:5305
            额外:推送连接@ 1中的'd'的孩子
    *************************** 3. row ******************** *******
               ID:1
      select_type:SIMPLE
            表:e
             键入:eq_ref
    possible_keys:PRIMARY
              键:主键
          key_len:4
              ref:employees.de.emp_no
             行:1
            额外:推送连接@ 1中的'de'的孩子
    *************************** 4. row ******************** *******
               ID:1
      select_type:SIMPLE
            表:t
             键入:ref
    possible_keys:PRIMARY,emp_no
              key:emp_no
          key_len:4
              ref:employees.de.emp_no
             行数:19
            额外:推送连接@ 1中的'e'子项
    4行(0.00秒)
    
    注意

    如果内部联接的子表被加入 ref并且结果按排序索引进行排序或分组,则此索引无法提供排序的行,这会强制写入已排序的临时文件。

    有关推送连接性能的其他两个信息源可用:

    1. 状态变量 Ndb_pushed_queries_definedNdb_pushed_queries_droppedNdb_pushed_queries_executed,和 Ndb_pushed_reads

    2. ndbinfo.counters 表中属于DBSPJ 内核块 的计数器 有关这些计数器的信息请参见 第21.5.10.10节“ndbinfo计数器表”另请参见 该DBSPJ座,中NDB集群API开发人员指南

  • ndb_log_apply_status

    表21.239 ndb_log_apply_status的类型和值信息

    属性
    名称 ndb_log_apply_status
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:作为从服务器的MySQL服务器是否使用其自己的服务器ID,在其自己的二进制日志中记录从它的直接主服务器接收到的mysql.ndb_apply_status更新。


    一个只读变量,显示服务器是否已启动该 --ndb-log-apply-status 选项。

  • ndb_log_bin

    表21.240 ndb_log_bin的类型和值信息

    属性
    名称 ndb_log_bin
    命令行
    系统变量
    状态变量 没有
    选项文件 没有
    范围
    动态
    类型
    默认值,范围(版本) ON(版本:NDB 7.5-7.6)
    笔记

    描述:将更新写入二进制日志中的NDB表。仅当使用--log-bin启用二进制日志记录时才有效。


    导致NDB要写入二进制日志的表的更新如果二进制日志记录尚未针对使用的服务器启用,则设置此变量不起作用log_binndb_log_bin默认为1(ON); 通常,在生产环境中从不需要更改此值。

  • ndb_log_binlog_index

    表21.241 ndb_log_binlog_index的类型和值信息

    属性
    名称 ndb_log_binlog_index
    命令行
    系统变量
    状态变量 没有
    选项文件 没有
    范围 全球
    动态
    类型
    默认值,范围(版本) ON(版本:NDB 7.5-7.6)
    笔记

    描述:将时期和二进制日志位置之间的映射插入到ndb_binlog_index表中。默认为ON。仅在服务器上启用二进制日志记录时有效。


    导致时元到二进制日志中位置的映射被插入到 ndb_binlog_index表中。如果二进制日志记录尚未针对使用的服务器启用,则设置此变量不起作用 log_bin(另外, ndb_log_bin一定不要禁用。)ndb_log_binlog_index defaults to 1ON); 通常,在生产环境中从不需要更改此值。

  • ndb_log_empty_epochs

    表21.242 ndb_log_empty_epochs的类型和值信息

    属性
    名称 ndb_log_empty_epochs
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:启用时,即使在启用log_slave_updates时,其中没有更改的时期也会写入ndb_apply_status和ndb_binlog_index表。


    当这个变量被设置为0时,没有变化的历元事务不会被写入二进制日志,尽管一个行仍然会写入一个空的历元 ndb_binlog_index

  • ndb_log_empty_update

    表21.243 ndb_log_empty_update的类型和值信息

    属性
    名称 ndb_log_empty_update
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:启用时,即使在启用log_slave_updates时,不会产生更改的更新也将写入ndb_apply_status和ndb_binlog_index表中。


    当此变量设置为ON1)时,即使--log-slave-updates启用了更新事务,也不会将更改写入二进制日志

  • ndb_log_exclusive_reads

    表21.244 ndb_log_exclusive_reads的类型和值信息

    属性
    名称 ndb_log_exclusive_reads
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) 0(版本:NDB 7.5-7.6)
    笔记

    描述:用独占锁来记录主键读取; 根据读取冲突允许冲突解决。


    此变量确定是否使用排他锁来记录主键读取,这允许基于读取冲突的NDB群集复制冲突检测和解决方案。要启用这些锁定,请将其值设置 ndb_log_exclusive_reads为1. 0将禁用此类锁定,这是默认设置。

    有关更多信息,请参阅 读取冲突检测和解决

  • ndb_log_orig

    表21.245 ndb_log_orig的类型和值信息

    属性
    名称 ndb_log_orig
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:源服务器的id和epoch是否记录在mysql.ndb_binlog_index表中。启动mysqld时使用--ndb-log-orig选项设置..


    显示表中是否记录了始发服务器标识和时代ndb_binlog_index使用--ndb-log-orig服务器选项进行设置

  • ndb_log_transaction_id

    表21.246 ndb_log_transaction_id的类型和值信息

    属性
    名称 ndb_log_transaction_id
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:NDB事务ID是否写入二进制日志(只读)。


    此只读布尔系统变量显示从属mysqld是否在二进制日志中写入NDB事务ID(需要使用 具有冲突检测的主动 - 主动 NDB群集复制 NDB$EPOCH_TRANS())。要更改设置,请使用该 --ndb-log-transaction-id 选项。

    ndb_log_transaction_id 在主线MySQL Server 5.7中不受支持。

    有关更多信息,请参见 第21.6.11节“NDB群集复制冲突解决”

  • ndb_optimized_node_selection

    表21.247 ndb_optimized_node_selection的类型和值信息

    属性
    名称 ndb_optimized_node_selection
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) ON(版本:NDB 7.5-7.6)
    默认值,范围(版本) 3/0 - 3(版本:5.1.22-ndb-6.3.4)
    笔记

    描述:确定SQL节点如何选择集群数据节点用作事务协调器。


    有两种形式的优化节点选择,如下所述:

    1. SQL节点使用 promixity来确定事务协调器; 也就是说,选择SQL节点最近数据节点作为事务协调器。为此,具有与SQL节点共享内存连接的数据节点被认为是 最接近 SQL节点; 下一个最近的(按照接近度递减的顺序)是:TCP连接到localhost; SCI连接; 来自主机以外的TCP连接 localhost

    2. SQL线程使用 分发感知来选择数据节点。也就是说,容纳由给定事务的第一条语句访问的集群分区的数据节点将用作整个事务的事务协调器。(只有当事务的第一条语句访问不超过一个集群分区时,这才有效。)

    此选项取整数值之一 012,或33是默认值。这些值影响节点选择,如下所示:

    • 0:节点选择未优化。每个数据节点在SQL线程前进到下一个数据节点之前被用作事务协调器8次。

    • 1:接近SQL节点用于确定事务协调器。

    • 2:分配感知用于选择事务协调器。但是,如果事务的第一条语句访问多个集群分区,则SQL节点将恢复为此选项设置为时看到的循环行为 0

    • 3:如果可以使用分配意识来确定交易协调员,那么就使用它; 否则使用接近度来选择事务协调器。(这是默认行为。)

    接近度确定如下:

    1. 从为Group参数设置的值开始 (默认为55)。

    2. 对于与其他API节点共享相同主机的API节点,将值减1。假设默认值for Group,与API节点在同一主机上的数据节点的有效值为54,并且为远程数据节点55。

    3. NDB 7.5.2和更高版本:)设置 ndb_data_node_neighbour 进一步将有效值减少 Group50,导致该节点被视为最近的节点。只有当所有数据节点位于主机上的主机之外的其他主机上时,才需要这样做,并且需要将其中的一个专用于API节点。在正常情况下,前面描述的默认调整就足够了。

    频繁更改 ndb_data_node_neighbour并不可取,因为这会更改集群连接的状态,因此可能会中断每个线程的新事务的选择算法,直至其稳定。

  • ndb_read_backup

    表21.248 ndb_read_backup的类型和值信息

    属性
    名称 ndb_read_backup
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) OFF(版本:5.7.12-ndb-7.5.2)
    笔记

    描述:启用从任何​​副本读取。


    NDB随后创建的任何表的任何副本启用读取

    在NDB 7.5.2中添加。

  • ndb_recv_thread_activation_threshold

    表21.249 ndb_recv_thread_activation_threshold的类型和值信息

    属性
    名称 ndb_recv_thread_activation_threshold
    命令行 没有
    系统变量 没有
    状态变量 没有
    选项文件 没有
    范围
    动态 没有
    类型
    默认值,范围(版本) 8/0(MIN_ACTIVATION_THRESHOLD) - 16(MAX_ACTIVATION_THRESHOLD)(版本:5.6.10-ndb-7.3.1)
    笔记

    描述:当接收线程接管群集连接的轮询(在并发活动线程中测量)时的激活阈值。


    当达到此并发活动线程数时,接收线程接管轮询群集连接。

    这个变量在全局范围内。它也可以在启动时使用该--ndb-recv-thread-activation-threshold 选项进行设置

  • ndb_recv_thread_cpu_mask

    表21.250 ndb_recv_thread_cpu_mask的类型和值信息

    属性
    名称 ndb_recv_thread_cpu_mask
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 全球
    动态
    类型
    默认值,范围(版本) [空](版本:NDB 7.5-7.6)
    笔记

    描述:用于将接收器线程锁定到特定CPU的CPU掩码; 指定为十六进制。详情请参阅文档..


    用于将接收器线程锁定到特定CPU的CPU掩码。这被指定为十六进制位掩码; 例如, 0x33意味着每个接收器线程使用一个CPU。一个空字符串是默认的; 设置 ndb_recv_thread_cpu_mask为该值将删除先前设置的任何接收方线程锁定。

    这个变量在全局范围内。它也可以在启动时使用该--ndb-recv-thread-cpu-mask 选项进行设置

  • ndb_report_thresh_binlog_epoch_slip

    表21.251 ndb_report_thresh_binlog_epoch_slip的类型和值信息

    属性
    名称 ndb_report_thresh_binlog_epoch_slip
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) 3/0 - 256(版本:NDB 7.5-7.6)
    默认值,范围(版本) 10/0 - 256(版本:5.7.16-ndb-7.5.4)
    笔记

    描述:NDB 7.5.4及更高版本:完全缓冲但尚未被二进制日志记录器线程消耗的历元数量的阈值,当超过该日志时会生成BUFFERED_EPOCHS_OVER_THRESHOLD事件缓冲区状态消息; 在NDB 7.5.4之前:在报告二进制日志状态之前,历元数量的阈值落后。


    在NDB 7.5.4和更高版本中,这代表完全缓冲在事件缓冲区中但尚未被binlog进程线程消耗的时期数的阈值。当超过这种程度的延迟(滞后)时,会报告事件缓冲区状态消息,并将其 BUFFERED_EPOCHS_OVER_THRESHOLD作为原因提供(请参见 第21.5.7.3节“群集日志中的事件缓冲区报告”)。当从数据节点接收到历元并在事件缓冲器中完全缓冲时,滑动增加; 当二进制日志记录器线程消耗一个时期时,它会减少。空时期被缓冲和排队,并且只有在使用Ndb::setEventBufferQueueEmptyEpoch() NDB API中方法启用时才包含在此计算中

    在NDB 7.5.4之前,可报告的值作为报告二进制日志状态之前的时代数量的阈值。在这些以前的版本中,3“默认”意味着如果从存储节点接收到哪个时期与哪个时期已应用于二进制日志之间的差异是3或更多,则将状态消息发送到集群日志。

  • ndb_report_thresh_binlog_mem_usage

    表21.252 ndb_report_thresh_binlog_mem_usage的类型和值信息

    属性
    名称 ndb_report_thresh_binlog_mem_usage
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) 10/0 - 10(版本:NDB 7.5-7.6)
    笔记

    描述:这是报告二进制日志状态之前剩余可用内存百分比的阈值。


    这是报告二进制日志状态之前剩余可用内存百分比的阈值。例如,10(默认值)意味着如果从数据节点接收二进制日志数据的可用内存量下降到10%以下,则会向群集日志发送状态消息。

  • slave_allow_batching

    表21.253 slave_allow_batching的类型和值信息

    属性
    名称 slave_allow_batching
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) 关(版本:NDB 7.5-7.6)
    笔记

    说明:打开和关闭复制从站的更新批处理。


    是否在NDB群集复制从属服务器上启用批量更新。

    仅当使用NDB存储引擎进行复制时,设置此变量才有效; 在MySQL Server 5.7中,它是存在的,但什么都不做。有关更多信息,请参见 第21.6.6节“启动NDB群集复制(单个复制通道)”

  • ndb_show_foreign_key_mock_tables

    表21.254 ndb_show_foreign_key_mock_tables的类型和值信息

    属性
    名称 ndb_show_foreign_key_mock_tables
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:显示用于支持foreign_key_checks = 0的模拟表。


    显示NDB支持 使用的模拟表foreign_key_checks=0启用此功能时,创建和删除表格时会显示额外的警告。表格的真实(内部)名称可以在输出中看到 SHOW CREATE TABLE

  • ndb_slave_conflict_role

    表21.255 ndb_slave_conflict_role的类型和值信息

    属性
    名称 ndb_slave_conflict_role
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态
    类型
    默认值,范围(版本) NONE / NONE,PRIMARY,SECONDARY,PASS(版本:NDB 7.5-7.6)
    笔记

    描述:奴隶在冲突检测和解决中发挥作用。值是PRIMARY,SECONDARY,PASS或NONE之一(默认值)。仅当从属SQL线程停止时才能更改。查看文档以获取更多信息..


    确定此SQL节点(和NDB集群)在循环(主动 - 主动)复制设置中的角色ndb_slave_conflict_role可以采取的值的任何一个PRIMARYSECONDARYPASS,或 NULL(缺省值)。必须先停止从属SQL线程,然后才能更改 ndb_slave_conflict_role此外,它是不可能直接在...之间改变 PASS和任一 PRIMARYSECONDARY 直接; 在这种情况下,您必须确保SQL线程已停止,然后SET @@GLOBAL.ndb_slave_conflict_role = 'NONE'执行

    有关更多信息,请参见 第21.6.11节“NDB群集复制冲突解决”

  • ndb_table_no_logging

    表21.256 ndb_table_no_logging的类型和值信息

    属性
    名称 ndb_table_no_logging
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 会议
    动态
    类型
    默认值,范围(版本) FALSE(版本:NDB 7.5-7.6)
    笔记

    描述:启用此设置时创建的NDB表不检查到磁盘(尽管创建表模式文件)。使用NDBCLUSTER创建或更改为使用NDBCLUSTER表时,有效的设置在表的生存期内保留。


    当此变量设置为ON或时 1,它会导致 NDB表不被检入磁盘。更具体地说,该设置适用于使用何时启用ENGINE NDB创建或更改 ndb_table_no_logging的表格,并且即使ndb_table_no_logging稍后更改,也会继续应用表格的生命周期 假设ABC,和 D是我们创建(或许也是改变),而且我们还更改设置表ndb_table_no_logging 如下所示:

    SET @@ ndb_table_no_logging = 1;
    
    CREATE TABLE A ... ENGINE NDB;
    
    CREATE TABLE B ... ENGINE MYISAM;
    CREATE TABLE C ... ENGINE MYISAM;
    
    ALTER TABLE B ENGINE NDB;
    
    SET @@ ndb_table_no_logging = 0;
    
    CREATE TABLE D ... ENGINE NDB;
    ALTER TABLE C ENGINE NDB;
    
    SET @@ ndb_table_no_logging = 1;
    

    在之前的事件序列之后,表格 AB没有检查点; A被创建 ENGINE NDB并且B被修改为使用 NDB,两者都 ndb_table_no_logging被启用。但是,表CD日志记录; C是改变使用NDBD使用被创造ENGINE NDB,而双方 ndb_table_no_logging已禁用。设置 ndb_table_no_logging1还是ON不会导致表CD进行检查点。

    注意

    ndb_table_no_logging 对创建NDB表模式文件没有影响 ; 要压制这些,请 ndb_table_temporary 改用。

  • ndb_table_temporary

    表21.257 ndb_table_temporary的类型和值信息

    属性
    名称 ndb_table_temporary
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 会议
    动态
    类型
    默认值,范围(版本) FALSE(版本:NDB 7.5-7.6)
    笔记

    描述:NDB表在磁盘上不是永久的:没有模式文件被创建并且表不被记录。


    设置为ON或时1,此变量导致NDB 表不会写入磁盘:这意味着不会创建表架构文件,并且表不会被记录。

    注意

    设置这个变量目前没有效果。这是一个已知的问题; 请参阅错误#34036。

  • ndb_use_copying_alter_table

    表21.258 ndb_use_copying_alter_table的类型和值信息

    属性
    名称 ndb_use_copying_alter_table
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围
    动态 没有
    类型
    笔记

    描述:使用在NDB集群中复制ALTER TABLE操作。


    NDB在线ALTER TABLE操作出现问题时, 强制使用表格复制 默认值是OFF

  • ndb_use_exact_count

    表21.259 ndb_use_exact_count的类型和值信息

    属性
    名称 ndb_use_exact_count
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围
    动态
    类型
    默认值,范围(版本) ON(版本:NDB 7.5-7.6)
    默认值,范围(版本) OFF(版本:5.1.47-ndb-7.1.8)
    笔记

    描述:计划查询时使用确切的行数。


    强制NDBSELECT COUNT(*)查询计划期间使用记录计数来加速此类查询。默认值是OFF,它允许整体更快的查询。

  • ndb_use_transactions

    表21.260 ndb_use_transactions的类型和值信息

    属性
    名称 ndb_use_transactions
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围
    动态
    类型
    默认值,范围(版本) ON(版本:NDB 7.5-7.6)
    笔记

    描述:强制NDB在SELECT COUNT(*)查询计划期间使用记录计数来加速此类查询。


    您可以NDB 通过将此变量的值设置为OFF(不推荐)来禁用事务支持 默认是 ON

  • ndb_version

    表21.261 ndb_version的类型和值信息

    属性
    名称 ndb_version
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) (版本:NDB 7.5-7.6)
    笔记

    描述:将生成和NDB引擎版本显示为整数。


    NDB 引擎版本,作为一个复合整数。

  • ndb_version_string

    表21.262 ndb_version_string的类型和值信息

    属性
    名称 ndb_version_string
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) (版本:NDB 7.5-7.6)
    笔记

    描述:以ndb-xyz格式显示包含NDB引擎版本的构建信息。


    NDB引擎版本 格式。 ndb-x.y.z

  • server_id_bits

    表21.263 server_id_bits的类型和值信息

    属性
    名称 server_id_bits
    命令行
    系统变量
    状态变量 没有
    选项文件
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) 32/7 - 32(版本:NDB 7.5-7.6)
    笔记

    描述:如果服务器以--server-id-bits选项设置为非默认值启动,server_id的有效值。


    的有效值 server_id如果服务器开始与 --server-id-bits设置非默认值的选项。

    如果值server_id 大于或等于2的幂 server_id_bitsmysqld拒绝启动。

    该系统变量仅由NDB群集支持。 server_id_bits不被标准的MySQL服务器支持。

  • transaction_allow_batching

    表21.264 transaction_allow_batching的类型和值信息

    属性
    名称 transaction_allow_batching
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 会议
    动态
    类型
    默认值,范围(版本) FALSE(版本:NDB 7.5-7.6)
    笔记

    描述:允许在事务中对语句进行批处理。禁用AUTOCOMMIT以使用..


    设置为1或时ON,此变量可以在同一事务中对语句进行批处理。要使用此变量, autocommit必须先将其设置为0先禁用OFF; 否则,设置 transaction_allow_batching 不起作用。

    将此变量用于仅执行写入操作的事务是安全的,因为启用它会导致从之前映像读取数据您应该确保在发出任何未决事务之前提交(COMMIT如果需要,使用明确的SELECT

    重要

    transaction_allow_batching 只要有可能某个陈述的效果取决于同一交易中先前陈述的结果,就不应该使用它。

    该变量目前仅支持NDB群集。

以下列表中的系统变量都与 ndbinfo信息数据库有关。

  • ndbinfo_database

    表21.265 ndbinfo_database的类型和值信息

    属性
    名称 ndbinfo_database
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) ndbinfo(版本:NDB 7.5-7.6)
    笔记

    描述:用于NDB信息数据库的名称; 只读。


    显示用于NDB 信息数据库的名称; 默认是 ndbinfo这是一个只读变量,其值是在编译时确定的; 您可以通过启动服务器来设置它,该服务器 将设置此变量的值,但实际上并未更改用于NDB信息数据库的名称。 --ndbinfo-database=name

  • ndbinfo_max_bytes

    表21.266 ndbinfo_max_bytes的类型和值信息

    属性
    名称 ndbinfo_max_bytes
    命令行
    系统变量
    状态变量 没有
    选项文件 没有
    范围
    动态
    类型
    默认值,范围(版本) 0 / - (版本:NDB 7.5-7.6)
    笔记

    描述:仅用于调试。


    仅用于测试和调试。

  • ndbinfo_max_rows

    表21.267 ndbinfo_max_rows的类型和值信息

    属性
    名称 ndbinfo_max_rows
    命令行
    系统变量
    状态变量 没有
    选项文件 没有
    范围
    动态
    类型
    默认值,范围(版本) 10 / - (版本:NDB 7.5-7.6)
    笔记

    描述:仅用于调试。


    仅用于测试和调试。

  • ndbinfo_offline

    表21.268 ndbinfo_offline的类型和值信息

    属性
    名称 ndbinfo_offline
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 全球
    动态
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:将ndbinfo数据库置于脱机模式,其中不会从表或视图返回行。


    ndbinfo 数据库置于离线模式,在这种模式下即使表格和视图不能真正存在,也不能打开,或者它们存在但是具有不同的定义 NDB没有行从这些表(或视图)返回。

  • ndbinfo_show_hidden

    表21.269 ndbinfo_show_hidden的类型和值信息

    属性
    名称 ndbinfo_show_hidden
    命令行
    系统变量
    状态变量 没有
    选项文件 没有
    范围
    动态
    类型
    默认值,范围(版本) OFF(版本:NDB 7.5-7.6)
    笔记

    描述:是否在mysql客户端中显示ndbinfo内部基表。默认为OFF ..


    无论在 ndbinfo数据库的基础内部表显示在 mysql客户端。默认是 OFF

  • ndbinfo_table_prefix

    表21.270 ndbinfo_table_prefix的类型和值信息

    属性
    名称 ndbinfo_table_prefix
    命令行
    系统变量
    状态变量 没有
    选项文件 没有
    范围
    动态
    类型
    默认值,范围(版本) ndb $(版本:NDB 7.5-7.6)
    笔记

    描述:用于命名ndbinfo内部基表的前缀。


    用于命名ndbinfo数据库基表的前缀(通常是隐藏的,除非通过设置暴露 ndbinfo_show_hidden)。这是一个只读变量,其默认值是 ndb$您可以使用该--ndbinfo-table-prefix选项启动服务器 ,但这只是设置变量,并不会更改用于命名隐藏基表的实际前缀; 前缀本身是在编译时确定的。

  • ndbinfo_version

    表21.271 ndbinfo_version的类型和值信息

    属性
    名称 ndbinfo_version
    命令行 没有
    系统变量
    状态变量 没有
    选项文件 没有
    范围 全球
    动态 没有
    类型
    默认值,范围(版本) (版本:NDB 7.5-7.6)
    笔记

    描述:ndbinfo引擎的版本; 只读。


    显示ndbinfo正在使用引擎版本 ; 只读。

21.3.3.9.3 NDB群集状态变量

本节提供有关与NDB集群和NDB存储引擎相关的MySQL服务器状态变量的详细信息 对于不特定于NDB群集的状态变量以及有关使用状态变量的一般信息,请参见 第5.1.7节“服务器状态变量”

21.3.3.10 NDB集群TCP / IP连接

TCP / IP是NDB群集中节点间所有连接的默认传输机制。通常不需要定义TCP / IP连接; NDB群集为所有数据节点,管理节点和SQL或API节点自动设置此类连接。

注意

有关此规则的例外情况,请参见 第21.3.3.11节“使用直接连接的NDB群集TCP / IP连接”

要覆盖默认连接参数,有必要使用文件[tcp]中的一个或多个部分 来定义连接 config.ini每个 [tcp]部分明确定义了两个NDB簇节点之间的TCP / IP连接,并且必须包含至少参数 NodeId1NodeId2,以及将任何连接参数来覆盖。

也可以通过在[tcp default]部分中设置这些参数来更改这些参数的默认值

重要

文件[tcp]中的 任何部分config.ini应该文件中的所有其他部分之后最后列出 但是,这不是必需的[tcp default]部分。此要求是config.iniNDB群集管理服务器读取文件方式的已知问题

下面列出 了可以在文件中 设置的连接参数 [tcp]文件的[tcp default]各个部分config.ini

  • NodeId1

    表21.272该表提供了NodeId1 TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    为了识别两个节点之间的连接,需要提供他们的节点ID在[tcp] 配置文件为的值的部分 NodeId1NodeId2Id第21.3.3.7节“在NDB集群中定义SQL和其他API节点”中所述,每个节点都有相同的唯一

  • NodeId2

    表21.273该表提供了NodeId2 TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    为了识别两个节点之间的连接,需要提供他们的节点ID在[tcp] 配置文件为的值的部分 NodeId1NodeId2Id第21.3.3.7节“在NDB集群中定义SQL和其他API节点”中所述,每个节点都有相同的唯一

  • HostName1

    表21.274此表提供了HostName1 TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称或IP地址
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    HostName1HostName2参数可用于指定要用于两个节点之间的给定TCP连接的特定网络接口。用于这些参数的值可以是主机名或IP地址。

  • HostName2

    表21.275此表提供了HostName1 TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称或IP地址
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    HostName1HostName2参数可用于指定要用于两个节点之间的给定TCP连接的特定网络接口。用于这些参数的值可以是主机名或IP地址。

  • OverloadLimit

    表21.276此表提供了OverloadLimit TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    如果发送缓冲区中有多个未发送的字节,则认为连接超载。

    此参数可用于确定连接被认为过载之前发送缓冲区中必须存在的未发送数据量。有关更多信息请参见 第21.3.3.14节“配置NDB群集发送缓冲区参数”

  • SendBufferMemory

    表21.277此表提供了SendBufferMemory TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 2M
    范围 256K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    在对操作系统执行发送调用之前,TCP传输器使用缓冲区来存储所有消息。当这个缓冲区达到64KB时,它的内容被发送; 当一轮消息被执行时,这些也会被发送。为了处理临时的过载情况,也可以定义一个更大的发送缓冲区。

    如果明确设置此参数,则内存不专用于每个传输器; 相反,所使用的值表示对于TotalSendBufferMemory单个传输器可能使用的内存(即可用内存总量)中的内存量的硬限制 有关在NDB群集中配置动态传输器发送缓冲区内存分配的更多信息,请参见 第21.3.3.14节“配置NDB群集发送缓冲区参数”

    发送缓冲区的默认大小为2MB,这是大多数情况下推荐的大小。最小尺寸为64 KB; 理论最大值是4 GB。

  • SendSignalId

    表21.278该表提供了SendSignalId TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认 [见文字]
    范围 真假
    重新启动类型 ñ

    为了能够回溯分布式消息数据报,有必要识别每个消息。当此参数设置Y为时,消息ID通过网络传输。默认情况下,此功能在生产版本中处于禁用状态,并且在-debug 生成中启用

  • Checksum

    表21.279该表提供了Checksum TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    此参数是一个布尔参数(通过将其设置为启用Y1,通过将其设置到禁止N0)。它默认是禁用的。启用时,所有消息的校验和在放入发送缓冲区之前进行计算。此功能可确保消息在发送缓冲区或传输机制中等待时不会损坏。

  • PortNumber已过期

    此参数以前指定用于侦听来自其他节点的连接的端口号。现在已被弃用(并在NDB Cluster 7.5中删除); ServerPort为此,请使用 数据节点配置参数(错误#77405,错误#21280456)。

  • ReceiveBufferMemory

    表21.280此表提供了ReceiveBufferMemory TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 2M
    范围 16K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    指定从TCP / IP套接字接收数据时使用的缓冲区的大小。

    该参数的默认值是2MB。最小可能值是16KB; 理论最大值是4GB。

  • TCP_RCV_BUF_SIZE

    表21.281该表提供了TCP_RCV_BUF_SIZE TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 2G
    重新启动类型 ñ

    确定TCP传输器初始化期间接收缓冲区的大小。默认值和最小值为0,允许操作系统或平台设置此值。对于最常见的使用情况,建议使用默认值。

  • TCP_SND_BUF_SIZE

    表21.282该表提供了TCP_SND_BUF_SIZE TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 2G
    重新启动类型 ñ

    确定TCP传输器初始化期间发送缓冲区的大小。默认值和最小值为0,允许操作系统或平台设置此值。对于最常见的使用情况,建议使用默认值。

  • TCP_MAXSEG_SIZE

    表21.283该表提供了TCP_MAXSEG_SIZE TCP配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 2G
    重新启动类型 ñ

    确定TCP传输器初始化期间内存集的大小。对于最常见的使用情况,建议使用默认值。

  • TcpBind_INADDR_ANY

    将此参数设置为TRUE1绑定,IP_ADDR_ANY以便可以从任何地方进行连接(对于自动生成的连接)。默认是 FALSE0)。

  • Group

    ndb_optimized_node_selection 启用时,在某些情况下使用节点接近度来选择要连接的节点。通过将此参数设置为较低的值(该值被解释为更接近 ”),可以使用此参数来影响接近度有关更多信息,请参阅系统变量的说明。

21.3.3.11使用直接连接的NDB群集TCP / IP连接

使用数据节点之间的直接连接设置集群需要明确指定[tcp]在集群config.ini文件部分中连接的数据节点的交叉IP地址

在下面的例子中,我们设想一个集群至少有四台主机,一台用于管理服务器,一个SQL节点和两个数据节点。整个集群驻留在172.23.72.*局域网子网中。除通常的网络连接外,两个数据节点直接使用标准交叉电缆连接,并使用1.1.0.*地址范围中的IP地址直接相互通信, 如图所示:

#管理服务器
[ndb_mgmd]
ID = 1
主机名= 172.23.72.20

#SQL节点
的[mysqld]
ID = 2
主机名= 172.23.72.21

#数据节点
[NDBD]
ID = 3
主机名= 172.23.72.22

[NDBD]
ID = 4
主机名= 172.23.72.23

#TCP / IP连接
[TCP]
NodeID1相同= 3
NodeId2 = 4
主机名1 = 1.1.0.1
主机名2 = 1.1.0.2

HostName1HostName2指定的直接连接时参数仅使用。

使用数据节点之间的直接TCP连接可以使数据节点绕过交换机,集线器或路由器等以太网设备,从而减少集群的延迟,从而提高集群的整体效率。

注意

要以这种方式与两个以上的数据节点进行直接连接,您必须在每个数据节点与同一节点组中的每个其他数据节点之间建立直接连接。

21.3.3.12 NDB集群共享内存连接

NDB集群尝试使用共享内存传输器并尽可能自动进行配置。 文件中的[shm]部分 config.ini明确定义了集群中节点之间的共享内存连接。当显式定义共享存储器作为连接方法,有必要至少定义 NodeId1NodeId2ShmKey所有其他参数都有默认值,在大多数情况下应该可以正常工作。

重要

SHM功能仅被认为是实验性的目前任何NDB Cluster版本都没有官方支持它,并且测试结果表明SHM性能不会比使用TCP / IP作为传输器时的性能好得多。

由于这些原因,您必须自行确定或使用我们的免费资源(论坛,邮件列表)确定SHM是否可以在您的特定情况下正常工作。

  • NodeId1

    表21.284该表提供了NodeId1共享内存配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    为了识别两个节点之间的连接,有必要为它们中的每一个提供节点标识符,如 NodeId1NodeId2

  • NodeId2

    表21.285此表提供了NodeId2共享内存配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    为了识别两个节点之间的连接,有必要为它们中的每一个提供节点标识符,如 NodeId1NodeId2

  • HostName1

    表21.286此表提供了HostName1共享内存配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称或IP地址
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    HostName1HostName2参数可用于指定要用于在两个节点之间一个给定的SHM连接的特定网络接口。用于这些参数的值可以是主机名或IP地址。

  • HostName2

    表21.287该表提供了HostName1共享内存配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称或IP地址
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    HostName1HostName2参数可用于指定要用于在两个节点之间一个给定的SHM连接的特定网络接口。用于这些参数的值可以是主机名或IP地址。

  • OverloadLimit

    表21.288该表提供了OverloadLimit共享内存配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    如果发送缓冲区中有多个未发送的字节,则认为连接超载。

    此参数可用于确定连接被认为过载之前发送缓冲区中必须存在的未发送数据量。有关更多信息,请参见 第21.3.3.14节“配置NDB群集发送缓冲区参数”第21.5.10.44节“ndbinfo传输者表”

  • ShmKey

    表21.289该表提供了ShmKey共享内存配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    在设置共享内存段时,节点ID(用整数表示)用于唯一标识用于通信的共享内存段。没有默认值。

  • ShmSize

    表21.290此表提供了ShmSize共享内存配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 1M
    范围 64K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    每个SHM连接都有一个共享内存段,节点之间的消息由发送者放置并由阅读器读取。这个细分的大小由 ShmSize默认值是1MB。

  • SendSignalId

    表21.291该表提供了SendSignalId共享内存配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    为了回溯分布式消息的路径,有必要为每个消息提供唯一的标识符。设置此参数以Y使这些消息ID也通过网络传输。默认情况下,此功能在生产版本中处于禁用状态,并且在-debug生成中启用

  • Checksum

    表21.292该表提供了Checksum共享内存配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认 真正
    范围 真假
    重新启动类型 ñ

    该参数是默认禁用的布尔(Y/ N)参数。当它被启用时,所有消息的校验和在被放置到发送缓冲区之前被计算。

    此功能可防止消息在发送缓冲区中等待时被破坏。它还可以用来检查运输过程中数据是否损坏。

  • SigNum

    表21.293此表提供了Signum共享内存配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    当使用共享内存传输器时,当共享内存中有新数据可用时,进程会向另一个进程发送操作系统信号。如果该信号与现有信号相冲突,则可以使用此参数来更改它。由于不同的操作系统使用不同的信号编号,因此使用SHM时可能会出现这种情况。

    默认值 SigNum是0; 因此,在使用共享内存传输程序时,必须将其设置为避免群集日志中的错误。通常,该参数[shm default]config.ini文件部分中 设置为10

21.3.3.13 NDB集群中的SCI传输连接

[sci]config.ini文件中的部分 明确定义了集群节点之间的SCI(可伸缩连贯接口)连接。在NDB集群中使用SCI传输器需要专门的硬件以及特制的MySQL二进制文件; 使用NDB 7.2或更高版本的发行版不支持编译此类二进制文件。

NDB 源代码 中包含以下参数以及ndb_config和其他NDB 程序的输出 ,但在NDB 7.2及更高版本中不起作用。

  • NodeId1

    表21.294该表提供了NodeId1 SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    为了识别两个节点之间的连接,有必要为它们中的每一个提供节点标识符,如 NodeId1NodeId2

  • NodeId2

    表21.295此表提供了NodeId2 SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 数字
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    为了识别两个节点之间的连接,有必要为它们中的每一个提供节点标识符,如 NodeId1NodeId2

  • Host1SciId0

    表21.296此表提供了Host1SciId0 SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    这标识了第一个集群节点上的SCI节点标识(由标识 NodeId1)。

  • Host1SciId1

    表21.297该表提供了Host1SciId1 SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    可以在两个SCI卡之间建立SCI传输器以实现故障转移,然后在节点之间使用单独的网络。这标识了要在第一个节点上使用的节点ID和第二个SCI卡。

  • Host2SciId0

    表21.298该表提供了Host2SciId0 SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 [没有]
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    这标识了第二个群集节点上的SCI节点标识(由标识 NodeId2)。

  • Host2SciId1

    表21.299该表提供了Host2SciId1 SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    当使用两张SCI卡提供故障转移时,该参数标识第二个节点上要使用的第二张SCI卡。

  • HostName1

    表21.300此表提供了HostName1 SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称或IP地址
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    HostName1HostName2参数可用于指定要用于在两个节点之间一个给定的SCI连接的特定网络接口。用于这些参数的值可以是主机名或IP地址。

  • HostName2

    表21.301该表提供了HostName1 SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 名称或IP地址
    默认 [没有]
    范围 ...
    重新启动类型 ñ

    HostName1HostName2参数可用于指定要用于在两个节点之间一个给定的SCI连接的特定网络接口。用于这些参数的值可以是主机名或IP地址。

  • SharedBufferSize

    表21.302此表提供了SharedBufferSize SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 10M
    范围 64K - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    每个SCI传输器都有一个共享内存段,用于两个节点之间的通信。将此段的大小设置为默认值1MB应该足以满足大多数应用程序的需求。使用较小的值可能会在执行多个平行插入时导致问题; 如果共享缓冲区太小,这也可能导致ndbd进程崩溃

  • SendLimit

    表21.303此表提供了SendLimit SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 无符号
    默认 8K
    范围 128 - 32K
    重新启动类型 ñ

    SCI媒体前面的一个小缓冲区在通过SCI网络传输它们之前存储消息。默认情况下,它被设置为8KB。我们的基准测试表明,性能最好在64KB,但16KB达到此范围的几个百分点,并且增加到8KB以下几乎没有任何优势。

  • SendSignalId

    表21.304该表提供了SendSignalId SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认 真正
    范围 真假
    重新启动类型 ñ

    要跟踪分布式消息,有必要唯一标识每个消息。当此参数设置 Y为时,消息ID通过网络传输。默认情况下,此功能在生产版本中处于禁用状态,并且在-debug生成中启用

  • Checksum

    表21.305该表提供了Checksum SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 布尔
    默认
    范围 真假
    重新启动类型 ñ

    该参数是一个布尔值,默认情况下禁用。Checksum启用时,所有消息的校验和将被放入发送缓冲区之前进行计算。此功能可防止消息在发送缓冲区中等待时被破坏。它还可以用来检查运输过程中数据是否损坏。

  • OverloadLimit

    表21.306此表提供了OverloadLimit SCI配置参数的类型和值信息

    属性
    版本(或更高版本) NDB 7.5.0
    类型或单位 字节
    默认 0
    范围 0 - 4294967039(0xFFFFFEFF)
    重新启动类型 ñ

    如果发送缓冲区中有多个未发送的字节,则认为连接超载。有关更多信息请参见 第21.3.3.14节“配置NDB群集发送缓冲区参数”

21.3.3.14配置NDB群集发送缓冲区参数

NDB核心采用统一发送缓冲区,其内存是由所有转运共享池动态分配。这意味着发送缓冲区的大小可以根据需要进行调整。统一发送缓冲区的配置可以通过设置以下参数来完成:

  • TotalSendBufferMemory。  该参数可为所有类型的NDB Cluster节点-即来设定,它可以在被设置 [ndbd][mgm][api](或[mysql]所述的)部分config.ini文件。它表示在所有配置的传输器中为其设置使用的每个节点分配的总内存量(以字节为单位)。如果设置,其最小值为256KB; 最大值是4294967039。

    为了与现有配置向后兼容,此参数将默认值设置为所有已配置传输器的最大发送缓冲区大小的总和,再加上每个传输器的额外32KB(一页)。最大值取决于运输车的类型,如下表所示:

    表21.307具有最大发送缓冲区大小的传输器类型

    运输车 最大发送缓冲区大小(字节)
    TCP SendBufferMemory (默认= 2M)
    SCI SendLimit (默认= 8K)加上16K
    SHM 20K

    这使得现有配置能够以与NDB Cluster 6.3及更早版本相同的方式运行,同时为每个传输器提供相同数量的内存和发送缓冲区空间。但是,其他运输商无法使用一个运输车未使用的内存。

  • OverloadLimit。  此参数用于 config.ini文件 [tcp]部分,表示在连接被认为过载之前必须存在于发送缓冲区中的未发送数据量(以字节为单位)。当发生这样的过载情况时,影响重载连接的事务将失败,并且NDB API错误1218(在NDB内核中发送缓冲区过载)直到过载状态通过。默认值为0,在这种情况下,SendBufferMemory * 0.8对于给定的连接计算有效过载限制该参数的最大值是4G。

  • SendBufferMemory。  此值表示可由单个传输器在由指定的整个池中使用的内存量的硬限制 TotalSendBufferMemory但是,SendBufferMemory 所有配置的传输器的总和可能大于 TotalSendBufferMemory 为给定节点设置的总和这是一种节省内存的方法,只要所有传输器同时不需要最大内存量即可。

  • ReservedSendBufferMemory。  在NDB 7.5.2中删除。

    在NDB 7.5.2之前,此数据节点参数已存在,但未实际使用(错误#77404,错误#21280428)。

您可以使用该 ndbinfo.transporters表来监视发送缓冲区内存使用情况,并检测可能对性能产生负面影响的减速和过载情况。

21.3.4使用与NDB群集的高速互连

即使NDBCLUSTER 在1996年开始设计之前,显然在构建并行数据库中遇到的主要问题之一是网络中的节点之间的通信。出于这个原因, NDBCLUSTER从一开始就设计允许使用多种不同的数据传输机制。在本手册中,我们使用术语 转运器来说明这些。

NDB集群代码库提供了四种不同的传输器:

目前大多数用户采用以太网TCP / IP,因为它无处不在。TCP / IP也是迄今为止与NDB集群一起使用的测试最佳的传输器。

我们正在努力确保与ndbd进程的通信以 尽可能大的 ”进行,因为这有利于所有类型的数据传输。

21.4 NDB群集计划

21.4.1 ndbd - NDB群集数据节点守护进程
21.4.2 ndbinfo_select_all - 从ndbinfo表中选择
21.4.3 ndbmtd - NDB群集数据节点守护进程(多线程)
21.4.4 ndb_mgmd - NDB群集管理服务器守护进程
21.4.5 ndb_mgm - NDB集群管理客户端
21.4.6 ndb_blob_tool -检查和维修NDB簇表的BLOB和TEXT列
21.4.7 ndb_config - 提取NDB群集配置信息
21.4.8 ndb_cpcd - 自动测试NDB开发
21.4.9 ndb_delete_all - 从NDB表中删除所有行
21.4.10 ndb_desc - 描述NDB表
21.4.11 ndb_drop_index - 从NDB表中删除索引
21.4.12 ndb_drop_table - 删除一个NDB表
21.4.13 ndb_error_reporter - NDB错误报告实用程序
21.4.14 ndb_import - 将CSV数据导入NDB
21.4.15 ndb_index_stat - NDB指数统计工具
21.4.16 ndb_move_data - NDB数据复制实用程序
21.4.17 ndb_perror - 获取NDB错误消息信息
21.4.18 ndb_print_backup_file - 打印NDB备份文件内容
21.4.19 ndb_print_file - 打印NDB磁盘数据文件内容
21.4.20 ndb_print_frag_file - 打印NDB片段列表文件内容
21.4.21 ndb_print_schema_file - 打印NDB架构文件内容
21.4.22 ndb_print_sys_file - 打印NDB系统文件内容
21.4.23 ndb_redo_log_reader - 检查并打印群集重做日志的内容
21.4.24 ndb_restore - 恢复NDB群集备份
21.4.25 ndb_select_all - 从NDB表中打印行
21.4.26 ndb_select_count - 为NDB表打印行计数
21.4.27 ndb_setup.py - 为NDB群集启动基于浏览器的自动安装程序
21.4.28 ndb_show_tables - 显示NDB表的列表
21.4.29 ndb_size.pl - NDBCLUSTER大小需求估计器
21.4.30 ndb_top - 查看NDB线程的CPU使用情况信息
21.4.31 ndb_waiter - 等待NDB集群达到给定状态
21.4.32 NDB群集程序的通用选项 - NDB群集程序的通用选项

使用和管理NDB群集需要几个专门的程序,我们在本章中描述。我们在NDB集群中讨论这些程序的用途,如何使用这些程序以及每个程序有哪些启动选项。

这些程序包括NDB集群数据,管理和SQL节点进程(ndbdndbmtdndb_mgmdmysqld)以及管理客户端(ndb_mgm)。

有关用于启动NDB群集自动安装程序的程序ndb_setup.py的信息也包含在本节中。您应该知道, 第21.4.27节“ ndb_setup.py - 启动基于浏览器的NDB集群自动安装程序”仅包含有关命令行客户端的信息; 有关使用此程序产生的GUI安装程序配置和部署NDB群集的信息,请参见 第21.2.1节“NDB群集自动安装程序”

有关使用mysqld作为NDB群集进程的信息,请参见第21.5.4节“NDB群集的MySQL服务器使用情况”

NDBNDB集群分发包含 其他实用程序,诊断程序和示例程序。这些包括ndb_restorendb_show_tablesndb_config这部分还介绍了这些程序。

本部分的最后部分包含所有各种NDB Cluster程序共有的选项表。

21.4.1  ndbd - NDB群集数据节点守护进程

ndbd是用于处理使用NDB群集存储引擎的表中的所有数据的进程。这是授权数据节点完成分布式事务处理,节点恢复,检查点到磁盘,联机备份和相关任务的过程。

在NDB集群中,一组ndbd进程合作处理数据。这些进程可以在同一台计算机(主机)上或不同的计算机上执行。数据节点和Cluster主机之间的对应关系是完全可配置的。

下表包含特定于NDB群集数据节点程序ndbd的命令选项其他说明在表格后面。有关大多数NDB群集程序(包括ndbd)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.308 ndbd程序的命令行选项

格式 描述 已添加,已弃用或已删除

--bind-address=name

本地绑定地址

所有基于MySQL 5.7的版本

--connect-delay=#

几秒钟之内尝试联系管理服务器的时间; 0意味着在尝试之间不要等待

所有基于MySQL 5.7的版本

--connect-retries=#

设置放弃之前重新尝试连接的次数; 0表示仅尝试1次(并且没有重试)

所有基于MySQL 5.7的版本

--connect-retry-delay=#

几秒钟之内尝试联系管理服务器的时间; 0意味着在尝试之间不要等待

所有基于MySQL 5.7的版本

--daemon

-d

作为守护进程启动ndbd(默认); 用--nodaemon覆盖

所有基于MySQL 5.7的版本

--foreground

在前台运行ndbd,用于调试目的(隐含--nodaemon)

所有基于MySQL 5.7的版本

--initial

执行ndbd的初始启动,包括清理文件系统。使用此选项之前请查阅文档

所有基于MySQL 5.7的版本

--initial-start

执行部分初始启动(需要--nowait-nodes)

所有基于MySQL 5.7的版本

--install[=name]

用于将数据节点进程安装为Windows服务。不适用于非Windows平台。

所有基于MySQL 5.7的版本

--logbuffer-size=#

控制日志缓冲区的大小。用于调试时生成许多日志消息; 对于正常操作来说,默认就足够了

ADDED:NDB 7.6.5

--nostart

-n

不要立即启动ndbd; ndbd等待命令从ndb_mgmd开始

所有基于MySQL 5.7的版本

--nodaemon

不要启动ndbd作为守护进程; 提供用于测试目的

所有基于MySQL 5.7的版本

--nowait-nodes=list

不要等待这些数据节点启动(以逗号分隔的节点ID列表)。还需要使用--ndb-nodeid。

所有基于MySQL 5.7的版本

--remove[=name]

用于删除先前作为Windows服务安装的数据节点进程。不适用于非Windows平台。

所有基于MySQL 5.7的版本

--verbose

-v

使数据日志将额外的调试信息写入节点日志。

所有基于MySQL 5.7的版本


注意

所有这些选项也适用于多线程版本的程序(的ndbmtd),您可以替代ndbmtdNDBD无论后者在本节进行。

  • --bind-address

    属性
    命令行格式 --bind-address=name
    类型
    默认

    导致ndbd绑定到特定的网络接口(主机名或IP地址)。该选项没有默认值。

  • --daemon-d

    属性
    命令行格式 --daemon
    类型 布尔
    默认 TRUE

    指示ndbdndbmtd作为守护程序进程执行。这是默认行为。 --nodaemon可以用来防止进程作为守护进程运行。

    在Windows平台上 运行ndbdndbmtd时,此选项无效

  • --nodaemon

    属性
    命令行格式 --nodaemon
    类型 布尔
    默认 FALSE

    阻止ndbdndbmtd作为守护进程执行。该选项将覆盖该 --daemon选项。这在调试二进制文件时将输出重定向到屏幕很有用。

    Windows上的ndbdndbmtd 的默认行为是在前台运行,因此在Windows平台上不需要此选项,因为它不起作用。

  • --foreground

    属性
    命令行格式 --foreground
    类型 布尔
    默认 FALSE

    导致ndbdndbmtd 作为前台进程执行,主要用于调试目的。这个选项意味着 --nodaemon选项。

    在Windows平台上 运行ndbdndbmtd时,此选项无效

  • --initial

    属性
    命令行格式 --initial
    类型 布尔
    默认 FALSE

    指示ndbd执行初始启动。初始启动将删除ndbd的早期实例为恢复目的而创建的所有文件 它还重新创建恢复日志文件。在某些操作系统上,此过程可能需要大量时间。

    --initial开始是用来在启动时 的ndbd非常特殊的情况的过程; 这是因为此选项会导致从NDB群集文件系统中删除所有文件,并重新创建所有重做日志文件。这些情况在这里列出:

    • 执行已更改任何文件内容的软件升级时。

    • 用新版本的ndbd重新启动节点时

    • 作为最后的手段,当由于某种原因重复节点重启或系统重启失败时。在这种情况下,请注意,由于数据文件被破坏,此节点不能再用于恢复数据。

    警告

    为避免最终数据丢失的可能性,建议您不要同时使用该 --initial选项 StopOnError = 0相反,只有在集群启动后才能设置 StopOnError为0 config.ini,然后通常重新启动数据节点 - 即没有 --initial选项。有关StopOnError 此问题的详细说明,请参阅参数说明。(错误#24945638)

    此选项的使用防止了 StartPartialTimeoutStartPartitionedTimeout 配置参数从具有任何效果。

    重要

    该选项并不会影响以下两种类型的文件:

    此选项对刚刚从正在运行的数据节点启动(或重新启动)的数据节点恢复数据也没有影响。数据恢复自动发生,并且不需要用户干预正常运行的NDB群集。

    第一次启动集群时(也就是在创建任何数据节点文件之前),允许使用此选项; 但是, 没有必要这样做。

  • --initial-start

    属性
    命令行格式 --initial-start
    类型 布尔
    默认 FALSE

    执行群集的部分初始启动时使用此选项。每个节点都应该以这个选项开始,以及 --nowait-nodes

    假设您有一个4节点集群,其数据节点的ID为2,3,4和5,并且您希望仅使用节点2,4和5执行部分初始化启动,即省略节点3:

    shell> ndbd --ndb-nodeid=2 --nowait-nodes=3 --initial-start
    shell> ndbd --ndb-nodeid=4 --nowait-nodes=3 --initial-start
    shell>ndbd --ndb-nodeid=5 --nowait-nodes=3 --initial-start
    

    使用此选项时,还必须为使用该选项启动的数据节点指定节点ID --ndb-nodeid

    重要

    不要混淆了此选项 --nowait-nodes供选择 ndb_mgmd,可用于实现与多个管理服务器配置集群没有所有管理服务器正在网上启动。

  • --logbuffer-size=#

    属性
    命令行格式 --logbuffer-size=#
    介绍 21年7月5日 - NDB-7.6.5
    类型 整数
    默认 32768
    最低限度 2048
    最大 4294967295

    设置数据节点日志缓冲区的大小。当使用大量额外的日志记录进行调试时,如果日志消息太多,日志缓冲区可能会用尽空间,在这种情况下,某些日志消息可能会丢失。这在正常操作过程中不应该发生。

  • --nowait-nodes=node_id_1[, node_id_2[, ...]]

    属性
    命令行格式 --nowait-nodes=list
    类型
    默认

    该选项将获取数据节点的列表,群集在启动之前不会等待该数据节点。

    这可以用于在分区状态下启动集群。例如,要启动只有一半数据节点(节点2,3,4和5)运行在4节点群集中的群集,可以使用启动每个ndbd进程--nowait-nodes=3,5在这种情况下,集群在节点2和节点4连接时立即启动,并且 节点3和节点5 不会等待 StartPartitionedTimeout毫秒,否则就会进行连接。

    如果您想要启动与前一个示例中相同的群集而没有一个ndbd(例如,说明节点3的主机出现硬件故障),请使用开始节点2,4和5 --nowait-nodes=3然后,集群将在节点2,4和5连接后立即启动,并且不会等待节点3启动。

  • --nostart-n

    属性
    命令行格式 --nostart
    类型 布尔
    默认 FALSE

    指示ndbd不要自动启动。使用此选项时, ndbd连接到管理服务器,从中获取配置数据,并初始化通信对象。但是,直到管理服务器特别要求这样做,它才真正启动执行引擎。这可以通过START 在管理客户端中发出适当的命令来完成(参见 第21.5.2节“NDB集群管理客户端中的命令”)。

  • --install[=name]

    属性
    命令行格式 --install[=name]
    平台特定 视窗
    类型
    默认 ndbd

    导致ndbd被安装为Windows服务。或者,您可以指定服务的名称; 如果未设置,则服务名称默认为 ndbd虽然优选的是指定其他的ndbd在程序选项 my.inimy.cnf 配置文件,所以可以一起使用 --install但是,在这种情况下,--install必须先指定选项,然后再提供任何其他选项,才能使Windows服务安装成功。

    通常不建议将该选项与该选项一起使用--initial,因为这会导致每次停止和启动服务时擦除并重建数据节点文件系统。至尊还应注意,如果你打算使用任何其他采取NDBD影响数据节点,包括启动选项 --initial-start--nostart以及 --nowait-nodes与-together --install,你应该绝对确保你完全理解并允许做任何可能的后果所以。

    --install选项对非Windows平台没有影响。

  • --remove[=name]

    属性
    命令行格式 --remove[=name]
    平台特定 视窗
    类型
    默认 ndbd

    导致先前作为Windows服务安装ndbd进程被删除。或者,您可以指定要卸载的服务的名称; 如果未设置,则服务名称默认为 ndbd

    --remove选项对非Windows平台没有影响。

  • --verbose-v

    导致额外的调试输出写入节点日志。

    在NDB 7.6.4和更高版本中,您还可以在数据节点运行时使用 NODELOG DEBUG ONNODELOG DEBUG OFF启用和禁用此额外日志记录。

  • --connect-retries=#

    属性
    命令行格式 --connect-retries=#
    类型 数字
    默认 12
    最低限度 0
    最大 65535

    设置放弃之前重新尝试连接的次数; 0表示仅尝试1次(并且不重试)。缺省值是12次尝试。两次尝试之间的等待时间由--connect-retry-delay 选项控制

  • --connect-delay=#

    属性
    命令行格式 --connect-delay=#
    弃用 28年6月5日,NDB-7.4.9
    类型 数字
    默认 5
    最低限度 0
    最大 3600

    确定启动时尝试联系管理服务器的等待时间(尝试次数由--connect-retries选项控制 )。默认值是5秒。

    此选项已弃用,并且可能会在未来版本的NDB群集中删除。--connect-retry-delay改为使用

  • --connect-retry-delay=#

    属性
    命令行格式 --connect-retry-delay=#
    类型 数字
    默认 5
    最低限度 0
    最大 4294967295

    确定启动时尝试联系管理服务器之间的等待时间(两次尝试之间的时间由--connect-retries选项控制 )。默认值是5秒。

    此选项取代 --connect-delay选项,该选项现在已被弃用,并可能在未来的NDB Cluster版本中删除。

ndbd生成一组日志文件,这些文件放置在配置文件中指定的目录 DataDirconfig.ini

这些日志文件列在下面。 node_id是并代表节点的唯一标识符。例如, ndb_2_error.log是由节点ID为的数据节点生成的错误日志2

  • ndb_node_id_error.log 是一个包含引用的ndbd进程遇到的所有崩溃记录的文件该文件中的每条记录都包含一个简短的错误字符串和对此崩溃的跟踪文件的引用。此文件中的典型条目可能如下所示:

    日期/时间:2004年7月30日星期六 -  00:20:01
    错误类型:错误
    消息:内部程序错误(失败ndbrequire)
    故障ID:2341
    问题数据:DbtupFixAlloc.cpp
    参考对象:DBTUP(Line:173)
    ProgramName:NDB内核
    ProcessID:14909
    TraceFile:ndb_2_trace.log.2
    *** *** EOM
    

    数据节点错误消息中可以找到数据节点进程过早关闭时生成 的可能的ndbd退出代码和消息列表

    重要

    错误日志文件中的最后一项不一定是最新的(也不可能是)。错误日志中的条目未按 时间顺序列出; 相反,它们对应于文件中确定的跟踪文件的顺序 (见下文)。错误日志条目因此以循环而非顺序的方式被覆盖。 ndb_node_id_trace.log.next

  • ndb_node_id_trace.log.trace_id 是一个描述发生错误之前发生的事情的跟踪文件。这些信息对NDB集群开发团队的分析非常有用。

    可以配置在旧文件被覆盖之前将创建的这些跟踪文件的数量。 trace_id是每个连续跟踪文件递增的数字。

  • ndb_node_id_trace.log.next 是跟踪要分配的下一个跟踪文件编号的文件。

  • ndb_node_id_out.log 是一个包含ndbd进程输出数据的文件 仅当ndbd作为守护程序启动时才会创建此文件,这是默认行为。

  • ndb_node_id.pid 是一个包含ndbd进程作为守护进程启动时的进程ID的文件 它也作为一个锁文件来避免启动具有相同标识符的节点。

  • ndb_node_id_signal.log 是仅在ndbd的调试版本中使用的文件,可以使用 ndbd进程中的数据跟踪所有传入,传出和内部消息

建议不要使用通过NFS安装的目录,因为在某些环境中,这可能会导致问题,即.pid即使在进程终止后,文件的锁定仍然有效。

要启动ndbd,可能还需要指定管理服务器的主机名以及它正在侦听的端口。或者,也可以指定进程要使用的节点ID。

外壳> ndbd --connect-string="nodeid=2;host=ndb_mgmd.mysql.com:1186"

有关此问题的其他信息 请参见第21.3.3.3节“NDB群集连接字符串”第21.4.32节“NDB群集程序通用选项 - NDB群集程序通用选项”介绍了可用于ndbd的其他命令行选项 有关数据节点配置参数的信息,请参见 第21.3.3.6节“定义NDB群集数据节点”

ndbd开始时,它实际启动两个进程。其中第一个被称为天使过程 ; 它唯一的工作是发现执行过程何时完成,然后如果配置为重新启动 ndbd进程。因此,如果您尝试使用Unix kill命令杀死ndbd,则必须从angel进程开始,终止这两个进程。终止ndbd进程的首选方法是使用管理客户端并从那里停止进程。

执行过程使用一个线程来读取,写入和扫描数据以及所有其他活动。该线程是异步实现的,因此它可以轻松处理数千个并发操作。另外,看门狗线程监督执行线程以确保它不会陷入无限循环。线程池处理文件I / O,每个线程都可以处理一个打开的文件。线程也可以用于ndbd进程中运输者的运输者连接 在执行大量操作(包括更新)的多处理器系统中,如果允许ndbd进程最多可以使用2个CPU。

对于具有多个CPU的机器,可以使用属于不同节点组的多个 ndbd进程; 然而,这样的配置仍然被认为是实验性的,并且在生产设置中不支持MySQL 5.7。参见 第21.1.6节“NDB簇的已知限制”

21.4.2  ndbinfo_select_all - 从ndbinfo表中选择

ndbinfo_select_all是一个客户端程序,用于从ndbinfo数据库中的 一个或多个表中选择所有行和列

并非所有ndbinfo可用于mysql客户端的都可以被这个程序读取。此外,ndbinfo_select_all可以显示关于一些表内部的信息 ndbinfo,其可以不使用SQL,包括访问tablescolumns元数据表。

ndbinfo使用ndbinfo_select_all从一个或多个表中进行选择,需要在调用程序时提供表的名称,如下所示:

外壳> ndbinfo_select_all table_name1  [table_name2] [...]

例如:

外壳> ndbinfo_select_all logbuffers logspaces
== logbuffers ==
node_id log_type log_id log_part总使用高
5 0 0 0 33554432 262144 0
6 0 0 0 33554432 262144 0
7 0 0 0 33554432 262144 0
8 0 0 0 33554432 262144 0
== logspaces ==
node_id log_type log_id log_part总使用高
5 0 0 0 268435456 0 0
5 0 0 1 268435456 0 0
5 0 0 2 268435456 0 0
5 0 0 3 268435456 0 0
6 0 0 0 268435456 0 0
6 0 0 1 268435456 0 0
6 0 0 2 268435456 0 0
6 0 0 3 268435456 0 0
7 0 0 0 268435456 0 0
7 0 0 1 268435456 0 0
7 0 0 2 268435456 0 0
7 0 0 3 268435456 0 0
8 0 0 0 268435456 0 0
8 0 0 1 268435456 0 0
8 0 0 2 268435456 0 0
8 0 0 3 268435456 0 0
外壳>                     

下表包含特定于ndbinfo_select_all的选项 其他说明在表格后面。有关大多数NDB群集程序(包括ndbinfo_select_all)的常见选项,请参见 第21.4.32节“NDB群集程序通用选项 - NDB群集程序通用选项”

表21.309 ndbinfo_select_all程序的命令行选项

格式 描述 已添加,已弃用或已删除

--delay=#

设置循环之间的延迟秒数。缺省值是5。

所有基于MySQL 5.7的版本

--loops=#

-l

设置执行选择的次数。缺省值是1。

所有基于MySQL 5.7的版本

--database=db_name

-d

表所在的数据库的名称。

所有基于MySQL 5.7的版本

--parallelism=#

-p

设置并行度。

所有基于MySQL 5.7的版本


  • --delay=seconds

    属性
    命令行格式 --delay=#
    类型 数字
    默认 5
    最低限度 0
    最大 MAX_INT

    该选项设置执行循环之间等待的秒数。如果--loops设置为0或1,则不起作用

  • --loops=number-l number

    属性
    命令行格式 --loops=#
    类型 数字
    默认 1
    最低限度 0
    最大 MAX_INT

    该选项设置执行选择的次数。使用--delay设置循环之间的时间。

21.4.3  ndbmtd - NDB群集数据节点守护进程(多线程)

ndbmtd ndbd的多线程版本 ,该进程用于处理使用NDBCLUSTER存储引擎的表中的所有数据 ndbmtd适用于具有多个CPU核心的主机。除另有说明外, ndbmtd的功能与 ndbd相同 ; 因此,在本节中,我们将重点关注 ndbmtd ndbd的不同之处,您应该参阅 第21.4.1节“ ndbd - NDB群集数据节点守护进程”有关运行适用于数据节点进程的单线程和多线程版本的NDB群集数据节点的其他信息。

ndbd一起使用的命令行选项和配置参数 也适用于ndbmtd有关这些选项和参数的更多信息,请分别参见 第21.4.1节“ ndbd - NDB群集数据节点守护进程”第21.3.3.6节“定义NDB群集数据节点”

ndbmtd也是与 ndbd文件系统兼容的 换句话说,可以停止运行 ndbd的数据节点 ,用 ndbmtd替换二进制文件 ,然后重新启动而不会丢失任何数据。(但是,这样做的时候,你必须确保 MaxNoOfExecutionThreads 正在重新启动的节点,如果你想为之前设定的apppriate值 ndbmtd在多线程的方式运行。)同样, ndbmtd二进制可以替换的ndbd简单地通过停止节点,然后启动 ndbd代替多线程二进制文件。在两者之间切换以启动数据节点二进制时不需要使用 --initial

在两个关键方面 使用ndbmtd与使用ndbd不同

  1. 因为ndbmtd在单线程模式下默认运行(即它的行为类似于 ndbd),所以您必须将其配置为使用多个线程。这可以通过在config.ini文件中为 MaxNoOfExecutionThreads 配置参数或 ThreadConfig 配置参数设置适当的值来完成使用 MaxNoOfExecutionThreads更简单,但 ThreadConfig提供了更多的灵活性。有关这些配置参数及其用法的更多信息,请参阅 多线程配置参数(ndbmtd)

  2. 跟踪文件由ndbmtd进程中的严重错误生成 ,其方式与ndbd故障生成的方式稍有不同 接下来的几段将对这些差异进行更详细的讨论。

ndbd一样ndbmtd 生成一组日志文件,这些文件放置在配置文件中指定的目录DataDirconfig.ini除跟踪文件外,它们都以相同的方式生成,并具有与由ndbd生成的名称相同的名称

如果发生严重错误,ndbmtd将 生成描述发生错误之前发生的事件的跟踪文件。这些文件可以在数据节点中找到 DataDir,对于NDB集群开发和支持团队分析问题很有用。为每个ndbmtd线程生成一个跟踪文件 这些文件的名称具有以下模式:

        
ndb_node_id_trace.log.trace_id_tthread_id

在此模式中,node_id代表集群中数据节点的唯一节点标识, trace_id是跟踪序列号,并且thread_id是线程标识。例如,如果ndbmtd进程作为具有节点ID 3且MaxNoOfExecutionThreads 等于4 的NDB集群数据节点运行时 发生故障, 则会在数据节点的数据目录中生成四个跟踪文件。如果是第一次在此节点发生故障,那么这些文件被命名为 ndb_3_trace.log.1_t1ndb_3_trace.log.1_t2ndb_3_trace.log.1_t3,和 ndb_3_trace.log.1_t4在内部,这些跟踪文件遵循与ndbd 跟踪文件相同的格式

在数据节点进程过早关闭时生成ndbd退出代码和消息也被ndbmtd使用请参阅 数据节点错误消息,以获取这些列表。

注意

可以在同一NDB群集的不同数据节点上同时使用ndbdndbmtd但是,这种配置还没有经过广泛的测试; 因此,我们现在不能在生产环境中推荐这样做。

21.4.4  ndb_mgmd - NDB群集管理服务器守护进程

管理服务器是读取群集配置文件并将此信息分发到请求它的群集中的所有节点的过程。它还维护集群活动的日志。管理客户端可以连接到管理服务器并检查群集的状态。

下表包含特定于NDB群集管理服务器程序 ndb_mgmd的选项其他说明在表格后面。有关大多数NDB群集程序(包括ndb_mgmd)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.310 ndb_mgmd程序的命令行选项

格式 描述 已添加,已弃用或已删除

--config-file=file (> =),

-f (> =)

指定群集配置文件; 在NDB-6.4.0和更高版本中,需要--reload或--initial来覆盖配置缓存(如果存在)

所有基于MySQL 5.7的版本

--configdir=directory

--config-dir=directory (> = 7.0.8)

指定群集管理服务器的配置缓存目录

所有基于MySQL 5.7的版本

--bind-address=host

本地绑定地址

所有基于MySQL 5.7的版本

--print-full-config

-P

打印完整配置并退出

所有基于MySQL 5.7的版本

--daemon

-d

在守护进程模式下运行ndb_mgmd(默认)

所有基于MySQL 5.7的版本

--nodaemon

不要运行ndb_mgmd作为守护进程

所有基于MySQL 5.7的版本

--interactive

以交互模式运行ndb_mgmd(在生产环境中未正式支持;仅用于测试目的)

所有基于MySQL 5.7的版本

--log-name=name

在群集日志中写入应用于此节点的消息时使用的名称。

所有基于MySQL 5.7的版本

--no-nodeid-checks

不要提供任何节点ID检查

所有基于MySQL 5.7的版本

--mycnf

从my.cnf文件读取群集配置数据

所有基于MySQL 5.7的版本

--reload

使管理服务器将配置文件与其配置缓存进行比较

所有基于MySQL 5.7的版本

--initial

使管理服务器从配置文件重新加载其配置数据,绕过配置缓存

所有基于MySQL 5.7的版本

--nowait-nodes=list

启动此管理服务器时不要等待这些管理节点。还需要使用--ndb-nodeid。

所有基于MySQL 5.7的版本

--config-cache[=TRUE|FALSE]

启用管理服务器配置缓存; 默认为TRUE。

所有基于MySQL 5.7的版本

--install[=name]

用于将管理服务器进程安装为Windows服务。不适用于非Windows平台。

所有基于MySQL 5.7的版本

--remove[=name]

用于删除先前作为Windows服务安装的管理服务器进程,可选地指定要删除的服务的名称。不适用于非Windows平台。

所有基于MySQL 5.7的版本


  • --bind-address=host

    属性
    命令行格式 --bind-address=host
    类型
    默认 [none]

    使管理服务器绑定到特定的网络接口(主机名或IP地址)。该选项没有默认值。

  • --no-nodeid-checks

    属性
    命令行格式 --no-nodeid-checks
    类型 布尔
    默认 FALSE

    不要执行节点ID的任何检查。

  • --configdir=dir_name

    属性
    命令行格式

    --configdir=directory

    --config-dir=directory

    类型 文件名
    默认 $INSTALLDIR/mysql-cluster

    指定群集管理服务器的配置缓存目录。--config-dir是此选项的别名。

  • --config-cache

    属性
    命令行格式 --config-cache[=TRUE|FALSE]
    类型 布尔
    默认 TRUE

    此选项的默认值为1(或 TRUE,或ON)可用于禁用管理服务器的配置缓存,以便config.ini每次启动时都会读取其配置 (请参见 第21.3.3节“NDB群集配置文件”)。您可以通过以下任一选项启动ndb_mgmd进程来执行此操作

    • --config-cache=0

    • --config-cache=FALSE

    • --config-cache=OFF

    • --skip-config-cache

    只有在管理服务器启动时没有存储配置的情况下,使用刚刚列出的选项之一才有效。如果管理服务器找到任何配置缓存文件,则该 --config-cache选项或 --skip-config-cache选项将被忽略。因此,要禁用配置缓存,应在管理服务器一次启动时使用该选项否则,也就是说,如果你想禁用的配置缓存,有一个管理服务器已经创建一个配置缓存 - 您必须停止管理服务器,手动删除任何现有的配置缓存文件,然后使用--skip-config-cache(或 --config-cache设置为等于0 OFFFALSE重新启动管理服务器

    配置缓存文件通常在mysql-cluster安装目录下的一个目录中创建(除非使用该--configdir选项覆盖此位置 )。管理服务器每次更新其配置数据时,都会写入新的缓存文件。这些文件按创建顺序按照以下格式顺序命名:

    ndb_ node-id_config.bin。seq-number
    

    node-id是管理服务器的节点ID; seq-number 是序列号,与1。例如开始,如果管理服务器的节点ID为5,则前三配置缓存文件会被创建时,被命名为ndb_5_config.bin.1ndb_5_config.bin.2ndb_5_config.bin.3

    如果您的意图是清除或重新加载配置缓存而不实际禁用缓存,则应该使用其中一个选项 替代方式 启动 ndb_mgmd--reload--initial--skip-config-cache

    要重新启用配置缓存,只需重新启动管理服务器,但没有先前使用--config-cache--skip-config-cache选项来禁用配置缓存。

    ndb_mgmd不检查配置目录(--configdir)或尝试在--skip-config-cache使用时创建一个(Bug#13428853)

  • --config-file=filename-f filename

    属性
    命令行格式 --config-file=file
    类型 文件名
    默认 [none]

    指示管理服务器将其用于配置文件的文件。默认情况下,管理服务器将查找config.inindb_mgmd可执行文件 位于同一目录中的 文件; 否则必须明确指定文件名和位置。

    此选项没有默认值,并且会被忽略,除非管理服务器被迫读取配置文件,或者是因为ndb_mgmd是使用--reloador --initial选项启动的,或者是因为管理服务器找不到任何配置缓存。如果ndb_mgmd启动时 也读取此选项 --config-cache=OFF有关更多信息请参见 第21.3.3节“NDB群集配置文件”

  • --mycnf

    属性
    命令行格式 --mycnf
    类型 布尔
    默认 FALSE

    my.cnf 文件读取配置数据

  • --daemon-d

    属性
    命令行格式 --daemon
    类型 布尔
    默认 TRUE

    指示ndb_mgmd作为守护进程启动。这是默认行为。

    在Windows平台上 运行ndb_mgmd时,此选项无效

  • --interactive

    属性
    命令行格式 --interactive
    类型 布尔
    默认 FALSE

    以交互模式 启动ndb_mgmd ; 也就是说,一旦管理服务器运行ndb_mgm客户端会话就会启动。该选项不会启动任何其他NDB群集节点。

  • --initial

    属性
    命令行格式 --initial
    类型 布尔
    默认 FALSE

    配置数据在内部进行缓存,而不是在每次启动管理服务器时从群集全局配置文件中读取(请参见 第21.3.3节“NDB群集配置文件”)。使用该 --initial选项将覆盖此行为,方法是强制管理服务器删除任何现有的缓存文件,然后重新从群集配置文件中读取配置数据并构建新的缓存。

    这与--reload选项有两个不同之处 首先, --reload强制服务器检查缓存中的配置文件并仅在文件内容与缓存不同时重新加载其数据。其次,--reload不删除任何现有的缓存文件。

    如果调用 ndb_mgmd--initial但找不到全局配置文件,则管理服务器无法启动。

    当管理服务器启动时,它会检查同一NDB群集中的另一个管理服务器,并尝试使用其他管理服务器的配置数据; ndb_mgmd会忽略 --initial它,除非它是唯一正在运行的管理服务器。此行为在执行具有多个管理节点的NDB群集的滚动重启时也有影响。有关更多信息请参见 第21.5.5节“执行NDB群集的滚动重新启动”

    当与该--config-file选项一起使用时 ,只有在实际找到配置文件时才会清除缓存。

  • --log-name=name

    属性
    命令行格式 --log-name=name
    类型
    默认 MgmtSrvr

    为集群日志中的此节点提供一个名称。

  • --nodaemon

    属性
    命令行格式 --nodaemon
    类型 布尔
    默认 FALSE

    指示ndb_mgmd不要作为守护进程启动。

    Windows上ndb_mgmd 的默认行为是在前台运行,因此在Windows平台上不需要此选项。

  • --print-full-config-P

    属性
    命令行格式 --print-full-config
    类型 布尔
    默认 FALSE

    显示关于群集配置的扩展信息。在命令行中使用此选项时, ndb_mgmd进程将打印有关群集设置的信息,其中包括群集配置节的大量列表以及参数及其值。通常与--config-file-f)选项一起使用

  • --reload

    属性
    命令行格式 --reload
    类型 布尔
    默认 FALSE

    NDB群集配置数据存储在内部,而不是在每次启动管理服务器时从群集全局配置文件读取(请参见 第21.3.3节“NDB群集配置文件”)。使用此选项强制管理服务器根据群集配置文件检查其内部数据存储,并在配置文件与高速缓存不匹配时重新加载配置。现有的配置缓存文件被保留,但未被使用。

    这与--initial选项有两个不同之处 首先, --initial导致所有缓存文件被删除。其次,--initial强制管理服务器重新读取全局配置文件并构建新的缓存。

    如果管理服务器找不到全局配置文件,则该--reload选项将被忽略。

    当管理服务器启动时,它会检查同一NDB群集中的另一个管理服务器,并尝试使用其他管理服务器的配置数据; ndb_mgmd会忽略 --reload它,除非它是唯一正在运行的管理服务器。此行为在执行具有多个管理节点的NDB群集的滚动重启时也有影响。有关更多信息请参见 第21.5.5节“执行NDB群集的滚动重新启动”

  • --nowait-nodes

    属性
    命令行格式 --nowait-nodes=list
    类型 数字
    默认
    最低限度 1
    最大 255

    启动NDB群集时,配置两个管理节点,每个管理服务器通常会检查其他ndb_mgmd是否也可操作,以及其他管理服务器的配置是否与其自身相同。但是,有时只需要一个管理节点即可启动群集(也许可以稍后启动其他 ndb_mgmd)。此选项会使管理节点绕过节点标识传递到此选项的任何其他管理节点的任何检查,从而允许群集启动,就像配置为仅使用启动的管理节点一样。

    为了说明的目的,考虑config.ini文件的以下部分(我们省略了与本示例无关的大部分配置参数):

    [NDBD]
    NodeId = 1
    HostName = 198.51.100.101
    
    [NDBD]
    NodeId = 2
    HostName = 198.51.100.102
    
    [NDBD]
    NodeId = 3
    HostName = 198.51.100.103
    
    [NDBD]
    NodeId = 4
    HostName = 198.51.100.104
    
    [ndb_mgmd]
    NodeId = 10
    HostName = 198.51.100.150
    
    [ndb_mgmd]
    NodeId = 11
    HostName = 198.51.100.151
    
    [API]
    NodeId = 20
    HostName = 198.51.100.200
    
    [API]
    NodeId = 21
    HostName = 198.51.100.201
    

    假定您希望仅使用具有节点标识的管理服务器启动此群集,10并在具有IP地址198.51.100.150的主机上运行该群集。(例如,假设您打算使用其他管理服务器的主机由于硬件故障而暂时不可用,并且您正在等待它被修复。)要以这种方式启动群集,请使用命令在198.51.100.150的机器上输入以下命令:

    外壳> ndb_mgmd --ndb-nodeid=10 --nowait-nodes=11
    

    如上例所示,使用时 --nowait-nodes,还必须使用该--ndb-nodeid 选项来指定此ndb_mgmd进程的节点标识

    然后,您可以用通常的方式启动每个群集的数据节点。如果希望稍后启动并使用除第一个管理服务器之外的第二个管理服务器而不重新启动数据节点,则必须使用引用两个管理服务器的连接字符串来启动每个数据节点,如下所示:

    外壳> ndbd -c 198.51.100.150,198.51.100.151
    

    希望作为连接到此群集的NDB群集SQL节点启动的任何mysqld进程一起使用的连接字符串也是如此有关更多信息请参见第21.3.3.3节“NDB群集连接字符串”

    ndb_mgmd一起使用时,此选项仅影响管理节点相对于其他管理节点的行为。不要将它与ndbdndbmtd中--nowait-nodes使用选项 混淆, 以允许集群以少于全部数据节点的数量开始; 当与数据节点一起使用时,该选项仅影响其他数据节点的行为。

    多个管理节点ID可以作为逗号分隔列表传递给此选项。每个节点ID必须不小于1且不大于255.实际上,对同一NDB群集使用两个以上的管理服务器(或者需要这样做)是非常罕见的。在大多数情况下,您只需向此选项传递一个管理服务器的单个节点标识,您不希望在启动集群时使用该标识。

    注意

    当您稍后启动缺少管理服务器时,其配置必须与群集已在使用的管理服务器的配置相匹配。否则,它将失败现有管理服务器执行的配置检查,并且不会启动。

启动管理服务器时不一定要指定连接字符串。但是,如果您使用多个管理服务器,则应提供连接字符串,并且群集中的每个节点都应明确指定其节点ID。

有关使用连接字符串的信息 请参见第21.3.3.3节“NDB群集连接字符串”第21.4.4节“ ndb_mgmd - NDB集群管理服务器守护程序”介绍了ndb_mgmd的其他选项

以下文件由ndb_mgmd在其起始目录中创建或使用 ,并DataDir按照config.ini配置文件中的指定放置在下面的列表中, node_id是唯一节点标识符。

  • config.ini是整个群集的配置文件。该文件由用户创建并由管理服务器读取。 第21.3节“配置NDB集群”讨论了如何设置这个文件。

  • ndb_node_id_cluster.log 是集群事件日志文件。此类事件的示例包括检查点启动和完成,节点启动事件,节点故障和内存使用级别。有关描述的集群事件的完整列表可以在第21.5节“NDB集群的管理”中找到

    默认情况下,当群集日志的大小达到100万字节时,该文件将重命名为 ,其中是群集日志文件的序列号。(例如:如果序列号为1,2和3的文件已经存在,则使用该数字命名下一个日志文件。)可以使用以下命令更改文件的大小和数量以及群集日志的其他特征 配置参数。 ndb_node_id_cluster.log.seq_idseq_id4LogDestination

  • ndb_node_id_out.log 是用于文件stdoutstderr运行管理服务器作为后台进程时。

  • ndb_node_id.pid 是将管理服务器作为守护程序运行时使用的进程ID文件。

  • --install[=name]

    属性
    命令行格式 --install[=name]
    平台特定 视窗
    类型
    默认 ndb_mgmd

    导致ndb_mgmd作为Windows服务安装。或者,您可以指定服务的名称; 如果未设置,则服务名称默认为 ndb_mgmd虽然最好在一个 配置文件中指定其他ndb_mgmd程序选项,但可以将它们一起使用 但是,在这种情况下,必须先指定选项,然后再提供任何其他选项,才能使Windows服务安装成功。 my.inimy.cnf--install--install

    通常不建议将该选项与该选项一起使用--initial,因为这会导致配置缓存在每次停止并启动服务时被擦除和重建。如果您打算使用影响管理服务器启动的任何其他ndb_mgmd选项,还应该小心 ,并且您应该绝对确定您完全理解并允许这样做的任何可能后果。

    --install选项对非Windows平台没有影响。

  • --remove[=name]

    属性
    命令行格式 --remove[=name]
    平台特定 视窗
    类型
    默认 ndb_mgmd

    导致先前作为Windows服务安装ndb_mgmd进程被删除。或者,您可以指定要卸载的服务的名称; 如果未设置,则服务名称默认为 ndb_mgmd

    --remove选项对非Windows平台没有影响。

21.4.5  ndb_mgm - NDB集群管理客户端

ndb_mgm实际上不需要管理客户端进程来运行群集。它的价值在于提供一组命令来检查群集的状态,启动备份和执行其他管理功能。管理客户端使用C API访问管理服务器。高级用户也可以使用此API编程专用管理进程来执行类似于ndb_mgm执行的任务

要启动管理客户端,需要提供管理服务器的主机名和端口号:

外壳> ndb_mgm [host_name [port_num]]

例如:

外壳> ndb_mgm ndb_mgmd.mysql.com 1186

默认的主机名和端口号分别是 localhost1186和1186。

下表包含特定于NDB集群管理客户端程序 ndb_mgm的选项其他说明在表格后面。有关大多数NDB群集程序(包括ndb_mgm)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.311 ndb_mgm程序的命令行选项

格式 描述 已添加,已弃用或已删除

--try-reconnect=#

-t

设置放弃之前重新尝试连接的次数; --connect-retries的同义词

所有基于MySQL 5.7的版本

--execute=name

-e

执行命令并退出

所有基于MySQL 5.7的版本


  • --connect-retries=#

    属性
    命令行格式 --connect-retries=#
    类型 数字
    默认 3
    最低限度 0
    最大 4294967295

    此选项指定在放弃之前第一次尝试重新尝试连接之后的次数(客户端始终尝试连接至少一次)。每次尝试等待的时间长度均使用 --connect-retry-delay

    该选项与该--try-reconnect选项同义, 现在已弃用。

    与其他NDB 程序一起使用时,此选项的默认设置与默认设置不同有关更多信息,请参见 第21.4.32节“NDB群集程序通用选项 - NDB群集程序通用选项”

  • --execute=command-e command

    属性
    命令行格式 --execute=name

    该选项可用于从系统shell向NDB集群管理客户端发送命令。例如,以下任一项相当于SHOW在管理客户端中执行

    外壳> ndb_mgm -e "SHOW"
    
    外壳> ndb_mgm --execute="SHOW"
    

    这与“ --execute或” -e选项与mysql命令行客户端的工作 方式类似 请参见 第4.2.4节“在命令行上使用选项”

    注意

    如果要使用此选项传递的管理客户端命令包含任何空格字符,则该命令 必须用引号括起来。可以使用单引号或双引号。如果管理客户端命令不包含空格字符,则引号是可选的。

  • --try-reconnect=number

    属性
    命令行格式 --try-reconnect=#
    弃用 28年6月5日,NDB-7.4.9
    类型(> = 5.7.10-ndb-7.5.0) 数字
    类型 整数
    默认(> = 5.7.10-ndb-7.5.0) 12
    默认 3
    最小值(> = 5.7.10-ndb-7.5.0) 0
    最低限度 0
    最大(> = 5.7.10-ndb-7.5.0) 4294967295
    最大 4294967295

    如果到管理服务器的连接中断,则节点每5秒尝试重新连接一次,直到成功。通过使用此选项,可以number 在放弃和报告错误之前限制尝试次数

    此选项已被弃用,并可能在未来版本中删除。--connect-retries改为使用

有关使用的其他信息ndb_mgm 可以发现 第21.5.2,“在NDB集群管理客户端命令”

21.4.6  ndb_blob_tool -检查和维修NDB簇表的BLOB和TEXT列

此工具可用于检查和删除NDB中的孤立BLOB列部分,并生成列出孤立部分的文件。它有时可用于诊断和修复NDB包含BLOBTEXT列的损坏或损坏的

ndb_blob_tool 的基本语法如下所示:

ndb_blob_tool [ options] table[ column,...]

除非你使用的--help 选项,你必须指定一个动作通过包括一个或多个选项来进行 --check-orphans--delete-orphans--dump-file这些选项会导致ndb_blob_tool检查孤立的BLOB部分,删除任何孤立的BLOB部分,并分别生成列出孤立BLOB部分的转储文件,本节后面将对此进行更详细的描述。

您还必须在调用ndb_blob_tool时指定表的名称 另外,您可以选择使用表格名称(逗号分隔)的一个或多个名称BLOBTEXT来自该表格的列。如果未列出任何列,则该工具可以在所有表​​格 BLOBTEXT列上工作。如果您需要指定数据库,请使用 --database-d)选项。

--verbose选项在输出中提供了关于工具进度的更多信息。

下表包含特定于ndb_blob_tool的选项 其他说明在表格后面。有关大多数NDB群集程序(包括ndb_blob_tool)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.312 ndb_blob_tool程序的命令行选项

格式 描述 已添加,已弃用或已删除

--check-orphans

检查孤立的斑点部分

所有基于MySQL 5.7的版本

--database=db_name

-d

数据库找到表中。

所有基于MySQL 5.7的版本

--delete-orphans

删除孤立的blob部分

所有基于MySQL 5.7的版本

--dump-file=file

将孤立密钥写入指定的文件

所有基于MySQL 5.7的版本

--verbose

-v

详细输出

所有基于MySQL 5.7的版本


  • --check-orphans

    属性
    命令行格式 --check-orphans
    类型 布尔
    默认 FALSE

    检查NDB簇表中孤立的BLOB部分。

  • --database=db_name-d

    属性
    命令行格式 --database=db_name
    类型
    默认 [none]

    指定数据库以查找表格。

  • --delete-orphans

    属性
    命令行格式 --delete-orphans
    类型 布尔
    默认 FALSE

    从NDB簇表中删除孤立的BLOB部分。

  • --dump-file=file

    属性
    命令行格式 --dump-file=file
    类型 文件名
    默认 [none]

    将孤立的BLOB列部分列表写入 file写入文件的信息包括每个孤立的BLOB部分的表键和BLOB部分号。

  • --verbose

    属性
    命令行格式 --verbose
    类型 布尔
    默认 FALSE

    在工具输出中提供有关其进度的额外信息。

首先,我们使用以下显示语句NDBtest数据库中 创建一个CREATE TABLE

USE测试;

CREATE TABLE btest(
    c0 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    c1文本,
    c2 BLOB
)ENGINE = NDB;

然后我们在这个表格中插入几行,使用一系列与此类似的语句:

INSERT INTO btest VALUES(NULL,'x',REPEAT('x',1000));

--check-orphans针对此表运行时 ndb_blob_tool将生成以下输出:

外壳> ndb_blob_tool --check-orphans --verbose -d test btest
连接的
处理2个斑点
处理blob#0 c1 NDB $ BLOB_19_1
NDB $ BLOB_19_1:nextResult:res = 1
总分:0
孤儿部分:0
处理blob#1 c2 NDB $ BLOB_19_2
NDB $ BLOB_19_2:nextResult:res = 0
NDB $ BLOB_19_2:nextResult:res = 0
NDB $ BLOB_19_2:nextResult:res = 0
NDB $ BLOB_19_2:nextResult:res = 0
NDB $ BLOB_19_2:nextResult:res = 0
NDB $ BLOB_19_2:nextResult:res = 0
NDB $ BLOB_19_2:nextResult:res = 0
NDB $ BLOB_19_2:nextResult:res = 0
NDB $ BLOB_19_2:nextResult:res = 0
NDB $ BLOB_19_2:nextResult:res = 0
NDB $ BLOB_19_2:nextResult:res = 1
总分:10
孤儿部分:0
断开的

NDBT_ProgramExit:0  - 确定

该工具报告没有NDB与列关联的BLOB列部分c1,即使c1TEXT列。这是由于以下事实:在NDB表中,只有一BLOBTEXT列值的前256个字节以内联方式存储,并且只有多余的(如果有的话)被分开存储; 因此,如果在其中一个类型的给定列中没有使用超过256个字节的值,则不会为此列BLOB创建列部分NDB有关更多信息请参见 第11.8节“数据类型存储要求”

21.4.7  ndb_config - 提取NDB群集配置信息

此工具从多种来源之一中提取数据节点,SQL节点和API节点的当前配置信息:NDB群集管理节点 config.ini或其my.cnf 文件。默认情况下,管理节点是配置数据的来源; 要覆盖默认值,请使用--config-file--mycnf选项执行ndb_config 通过指定其节点ID,也可以使用数据节点作为源 --config_from_node=node_id

ndb_config还可以提供可以使用的所有配置参数的离线转储,以及它们的默认值,最大值和最小值以及其他信息。转储可以以文本或XML格式生成; 有关更多信息,请参阅本节后面的讨论 --configinfo--xml选项)。

您可以过滤通过部分结果(DBSYSTEMCONNECTIONS使用其中的一个选项) --nodes--system--connections

下表包含特定于ndb_config的选项 其他说明在表格后面。有关大多数NDB群集程序(包括ndb_config)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.313 ndb_config程序的命令行选项

格式 描述 已添加,已弃用或已删除

--config-file=file_name

将路径设置为config.ini文件

所有基于MySQL 5.7的版本

--config_from_node=#

从具有此ID的节点获取配置数据(必须是数据节点)。

所有基于MySQL 5.7的版本

--configinfo

以默认值,最大值和最小值转储文本格式的所有NDB配置参数的相关信息。与--xml一起使用以获取XML输出。

所有基于MySQL 5.7的版本

--connections

仅打印群集配置文件的连接信息([tcp],[tcp default],[sci],[sci default],[shm]或[shm default]部分)。不能与--system或--nodes一起使用。

所有基于MySQL 5.7的版本

--diff-default

只打印具有非默认值的配置参数

ADDED:NDB 7.5.7,NDB 7.6.3

--fields=string

-f

字段分隔符

所有基于MySQL 5.7的版本

--host=name

指定主机

所有基于MySQL 5.7的版本

--mycnf

从my.cnf文件读取配置数据

所有基于MySQL 5.7的版本

--nodeid

--id

使用此ID获取节点的配置

所有基于MySQL 5.7的版本

--nodes

仅打印节点信息(群集配置文件的[ndbd]或[ndbd default]部分)。不能与--system或--connections一起使用。

所有基于MySQL 5.7的版本

-c

--ndb-connectingtring的简写形式

所有基于MySQL 5.7的版本

--query=string

-q

一个或多个查询选项(属性)

所有基于MySQL 5.7的版本

--query-all

-a

将所有参数和值转储到单个以逗号分隔的字符串中。

ADDED:NDB 7.4.16,NDB 7.5.7

--rows=string

-r

行分隔符

所有基于MySQL 5.7的版本

--system

仅打印SYSTEM部分信息(请参阅ndb_config --configinfo输出)。不能与--nodes或--connections一起使用。

所有基于MySQL 5.7的版本

--type=name

指定节点类型

所有基于MySQL 5.7的版本

--configinfo --xml

与--configinfo一起使用--xml以默认值,最大值和最小值获取XML格式的所有NDB配置参数的转储。

所有基于MySQL 5.7的版本


  • --configinfo

    --configinfo选项会导致 ndb_config转储NDB群集分配所支持的每个NDB群集配置参数的列表,其中ndb_config是其中的一部分,其中包括以下信息:

    • 每个参数的目的,效果和用法的简要说明

    • config.ini可以使用参数文件 部分

    • 参数的数据类型或度量单位

    • 在适用的情况下,参数的默认值,最小值和最大值

    • NDB集群发布版本和构建信息

    默认情况下,此输出为文本格式。部分输出如下所示:

    外壳> ndb_config --configinfo
    
    ****** SYSTEM ******
    
    名称(字符串)
    系统名称(NDB群集)
    强制性
    
    PrimaryMGMNode(非负整数)
    主ndb_mgmd(MGM)节点的节点标识
    默认值:0(最小值:0,最大值:4294967039)
    
    ConfigGenerationNumber(非负整数)
    配置生成号码
    默认值:0(最小值:0,最大值:4294967039)
    
    ****** D B ******
    
    MaxNoOfSubscriptions(非负整数)
    订阅最大数量(默认0 == MaxNoOfTables)
    默认值:0(最小值:0,最大值:4294967039)
    
    MaxNoOfSubscribers(非负整数)
    最大用户数(默认0 == 2 * MaxNoOfTables)
    默认值:0(最小值:0,最大值:4294967039)
    
    ...
    

    将此选项与选项一起使用 --xml以获取XML格式的输出。

  • --config-file=path-to-file

    属性
    命令行格式 --config-file=file_name
    类型 文件名
    默认

    为管理服务器的配置文件(config.ini提供路径这可能是相对或绝对路径。如果管理节点驻留在与调用ndb_config的主机不同的主机上,则必须使用绝对路径。

  • --config_from_node=#

    属性
    命令行格式 --config-from-node=#
    类型 数字
    默认 none
    最低限度 1
    最大 48

    从具有此ID的数据节点获取群集的配置数据。

    如果具有此ID的节点不是数据节点,则 ndb_config将失败并显示错误。(要从管理节点获取配置数据,只需省略此选项。)

  • --connections

    属性
    命令行格式 --connections
    类型 布尔
    默认 FALSE

    告诉ndb_config打印 CONNECTIONS信息只,也就是说,大约在找到的参数的信息 [tcp][tcp default][sci][sci default][shm],或[shm default]群集配置文件的部分(参见第21.3.3.10“NDB簇TCP / IP连接”第21.3.3.13“ NDB集群中的SCI传输连接“以及 第21.3.3.12节”NDB集群共享内存连接“以了解更多信息)。

    这个选项与--nodesand 互斥 --system; 这3个选项中只有一个可以使用。

  • --diff-default

    属性
    命令行格式 --diff-default
    介绍 5.7.18-NDB-7.6.3
    类型(> = 5.7.18-ndb-7.6.3) 布尔
    类型(> = 5.7.18-ndb-7.5.7) 布尔
    类型 布尔
    默认(> = 5.7.18-ndb-7.6.3) FALSE
    默认(> = 5.7.18-ndb-7.5.7) FALSE
    默认 FALSE

    只打印具有非默认值的配置参数。

  • --fields=delimiter-f delimiter

    属性
    命令行格式 --fields=string
    类型
    默认

    指定delimiter用于分隔结果中字段字符串。默认值是 ,(逗号字符)。

    注意

    如果delimiter包含空格或转义\n字符(例如换行字符),则必须引用它。

  • --host=hostname

    属性
    命令行格式 --host=name
    类型
    默认

    指定要获取配置信息的节点的主机名。

    注意

    虽然主机名localhost通常会解析为IP地址127.0.0.1,但这可能不一定适用于所有操作平台和配置。这意味着,它是可能的,当localhost被用于 config.inindb_config --host=localhost如果失败 ndb_config在不同的主机,其中上运行localhost解析到一个不同的地址(例如,在SUSE Linux的某些版本中,这是127.0.0.2)。通常,为了获得最佳结果,您应该为与主机相关的所有NDB群集配置值使用数字IP地址,或者验证所有NDB群集主机是否localhost以相同方式处理

  • --mycnf

    属性
    命令行格式 --mycnf
    类型 布尔
    默认 FALSE

    my.cnf 文件读取配置数据

  • --ndb-connectstring=connection_string-c connection_string

    属性
    命令行格式

    --ndb-connectstring=connectstring

    --connect-string=connectstring

    类型
    默认 localhost:1186

    指定用于连接到管理服务器的连接字符串。连接字符串的格式与第21.3.3.3节“NDB群集连接字符串”中所述的相同 ,默认为localhost:1186

  • --nodeid=node_id--id=node_id

    属性
    命令行格式 --ndb-nodeid=#
    类型 数字
    默认 0

    指定要获取配置信息的节点的节点ID。--nodeid是首选的形式。

  • --nodes

    属性
    命令行格式 --nodes
    类型 布尔
    默认 FALSE

    告诉ndb_config打印仅与群集配置文件的[ndbd][ndbd default]一节中定义的参数相关的信息 (请参见第21.3.3.6节“定义NDB群集数据节点”)。

    这个选项与--connectionsand 互斥 --system; 这3个选项中只有一个可以使用。

  • --query=query-options-q query-options

    属性
    命令行格式 --query=string
    类型
    默认

    这是查询选项的逗号分隔列表, 即要返回的一个或多个节点属性的列表。这些包括 id(节点ID),类型(节点类型,也就是说,ndbdmysqld,或 ndb_mgmd),并且任何配置参数,其值要被获得。

    例如, --query=nodeid,type,indexmemory,datamemory 返回节点ID,节点类型 DataMemory,和 IndexMemory每个节点。

    注意

    如果某个给定的参数不适用于某种类型的节点,则会返回相应值的空字符串。有关更多信息,请参阅本节后面的示例。

  • --query-all-a

    属性
    命令行格式 --query-all
    介绍 5.7.18-NDB-7.5.7
    类型(> = 5.7.18-ndb-7.4.16,5.7.18-ndb-7.5.7)
    默认值(> = 5.7.18-ndb-7.4.16,5.7.18-ndb-7.5.7)

    返回所有查询选项(节点属性)的以逗号分隔的列表;请注意,此列表是单个字符串。

    此选项在NDB 7.5.7中引入(错误号60095,错误号11766869)。

  • --rows=separator-r separator

    属性
    命令行格式 --rows=string
    类型
    默认

    指定separator用于分隔结果中的行字符串。默认值是空格字符。

    注意

    如果separator包含空格或转义\n字符(例如换行字符),则必须引用它。

  • --system

    属性
    命令行格式 --system
    类型 布尔
    默认 FALSE

    告诉ndb_configSYSTEM打印 信息。这包含在运行时无法更改的系统变量; 因此,它们没有相应的群集配置文件部分。它们可以****** SYSTEM ******ndb_config 的输出中看到(前缀 --configinfo

    这个选项与--nodesand 互斥 --connections; 这3个选项中只有一个可以使用。

  • --type=node_type

    属性
    命令行格式 --type=name
    类型 列举
    默认 [none]
    有效值

    ndbd

    mysqld

    ndb_mgmd

    过滤的结果,使得仅配置值施加到指定的节点 node_typendbdmysqld,或 ndb_mgmd)被返回。

  • --usage--help-?

    属性
    命令行格式

    --help

    --usage

    导致ndb_config打印可用选项列表,然后退出。

  • --version-V

    属性
    命令行格式 --version

    导致ndb_config打印版本信息字符串,然后退出。

  • --configinfo --xml

    属性
    命令行格式 --configinfo --xml
    类型 布尔
    默认 false

    导致ndb_config --configinfo通过添加此选项以XML形式提供输出。在这个例子中显示了一部分这样的输出:

    外壳> ndb_config --configinfo --xml
    
    <configvariables protocolversion =“1”ndbversionstring =“5.7.22-ndb-7.5.11”
                        ndbversion =“460032”ndbversionmajor =“7”ndbversionminor =“5”
                        ndbversionbuild = “0”>
      <section name =“SYSTEM”>
        <param name =“Name”comment =“系统名称(NDB Cluster)”type =“string”
                  强制性= “真”/>
        <param name =“PrimaryMGMNode”comment =“主节点ndb_mgmd(MGM)节点的节点ID”
                  type =“unsigned”default =“0”min =“0”max =“4294967039”/>
        <param name =“ConfigGenerationNumber”comment =“配置生成号码”
                  type =“unsigned”default =“0”min =“0”max =“4294967039”/>
      </节>
      <section name =“MYSQLD”primarykeys =“NodeId”>
        <param name =“wan”comment =“使用WAN TCP设置作为默认值”type =“bool”
                  默认= “假”/>
        <param name =“HostName”comment =“此节点的计算机名称”
                  type =“string”default =“”/>
        <param name =“Id”comment =“NodeId”type =“unsigned”mandatory =“true”
                  min =“1”max =“255”deprecated =“true”/>
        <param name =“NodeId”comment =“号码识别应用程序节点(mysqld(API))”
                  type =“unsigned”mandatory =“true”min =“1”max =“255”/>
        <param name =“ExecuteOnComputer”comment =“HostName”type =“string”
                  弃用= “真”/>
    
        ...
    
      </节>
    
      ...
    
    </ configvariables>
    
    注意

    通常,由ndb_config 生成的XML输出 --configinfo --xml格式化为每个元素使用一行; 我们在前面的例子中增加了额外的空白,以及下一个例子,这是出于可读性的原因。这对使用此输出的应用程序不应有任何区别,因为大多数XML处理器或者忽略了非必需的空白,或者可以指示这样做。

    XML输出还指示更改给定参数时何时需要使用该--initial选项重新启动数据节点 这通过initial="true" 在相应<param>元素中存在属性来显示 另外,还显示了重启类型(systemnode); 如果给定的参数需要系统重启,则通过restart="system"相应<param>元素中存在属性来指示例如,更改为该参数设置的值 Diskless需要系统初始重新启动,如此处所示(使用 restart和)initial 突出显示可见性的属性):

    <param name =“Diskless”comment =“Run wo / disk”type =“bool”default =“false”
               restart =“system”initial =“true” />
    

    目前,initial对于<param>不需要初始重新启动的参数对应元素,XML输出中包含任何属性 ; 换句话说,initial="false"是默认值,false如果该属性不存在,则应该假定该值同样,默认的重新启动类型是node(即联机或 滚动重新启动集群),但restart仅当重新启动类型为system(意味着所有集群节点必须同时关闭时才包含属性,则重新启动)。

    不推荐使用的参数在deprecated属性的XML输出中指示 ,如下所示:

    <param name =“NoOfDiskPagesToDiskAfterRestartACC”comment =“DiskCheckpointSpeed”
           type =“unsigned”default =“20”min =“1”max =“4294967039” deprecated =“true” />
    

    在这种情况下,comment指的是一个或多个取代弃用参数的参数。与之类似initial,该deprecated属性仅在该参数被弃用时才被指示,对于deprecated="true"未被弃用的参数,该 属性 不会被显示。(错误#21127135)

    从NDB 7.5.0开始,需要的参数用mandatory="true"如下所示表示:

    <param name =“NodeId”
              comment =“Number identification application node(mysqld(API))”
              type =“unsigned” mandatory =“true” min =“1”max =“255”/>
    

    只显示需要初始重新启动的参数或已弃用的参数显示initialor deprecated属性的方式大致相同,mandatory只有在实际需要给定参数时才会包含属性。

    重要

    --xml选项只能用于该--configinfo选项。使用 --xml--configinfo因错误而失败。

    与用于获取当前配置数据的此程序使用的选项不同,--configinfo并且 在编译ndb_config--xml时使用从NDB群集源获取的信息出于这个原因,这两个选项不需要连接到正在运行的NDB群集或访问文件文件。 config.inimy.cnf

不支持将其他ndb_config选项(如 --query--type)与--configinfo(带或不带该--xml选项)结合 使用, 目前,如果您尝试这样做,通常的结果是除了--configinfo--xml 忽略所有其他选项,但这种行为并不能保证并随时可能更改此外,由于ndb_config与该--configinfo选项一起使用时不会访问NDB群集或读取任何文件,因此试图指定其他选项(如--ndb-connectstring或不 --config-file带有 --configinfo任何用途)。

例子

  1. 要获取集群中每个节点的节点ID和类型,请执行以下操作:

    外壳> ./ndb_config --query=id,type --fields=':' --rows='\n'
    1:NDBD
    2:NDBD
    3:NDBD
    4:NDBD
    5:ndb_mgmd
    6:mysqld的
    7:mysqld的
    8:mysqld的
    9:mysqld的
    

    在此示例中,我们使用 --fields选项将每个节点的ID和类型与冒号字符(:分开,以及 --rows用于将每个节点的值放置在输出中的新行上的选项。

  2. 生成连接字符串,数据,SQL和API节点可以使用该连接字符串连接到管理服务器:

    外壳> ./ndb_config --config-file=usr/local/mysql/cluster-data/config.ini \
    --query=hostname,portnumber --fields=: --rows=, --type=ndb_mgmd
    198.51.100.179:1186
    
  3. 在此调用ndb_config只检查数据节点(使用 --type选项),并且示出了为每个节点的ID和主机名的值,以及作为其设置的值 DataMemoryIndexMemory以及 DataDir参数:

    外壳> ./ndb_config --type=ndbd --query=id,host,datamemory,indexmemory,datadir -f ' : ' -r '\n'
    1:198.51.100.193:83886080:18874368:/ usr / local / mysql / cluster-data
    2:198.51.100.112:83886080:18874368:/ usr / local / mysql / cluster-data
    3:198.51.100.176:83886080:18874368:/ usr / local / mysql / cluster-data
    4:198.51.100.119:83886080:18874368:/ usr / local / mysql / cluster-data
    

    在这个例子中,我们使用了简短的选项 -f和分别-r设置字段分隔符和行分隔符。

  4. 要排除除主机以外的任何主机的结果,请使用以下--host选项:

    外壳> ./ndb_config --host=198.51.100.176 -f : -r '\n' -q id,type
    3:NDBD
    5:ndb_mgmd
    

    在这个例子中,我们也使用简短的形式 -q来确定要查询的属性。

    同样,您可以使用该--nodeid 选项将结果限制为具有特定ID的节点

21.4.8  ndb_cpcd - 自动测试NDB开发

具有此名称的实用程序以前是用于测试和调试NDB群集的内部自动化测试框架的一部分。它不再包含在Oracle提供的NDB Cluster分布中。

21.4.9  ndb_delete_all - 从NDB表中删除所有行

ndb_delete_all删除给定NDB表中的所有行在某些情况下,这可能比DELETE甚至 更快 TRUNCATE TABLE

用法

ndb_delete_all -c -dconnection_string tbl_namedb_name

这将删除名为tbl_name的数据库中指定的表中的 所有行 db_name它完全等同于 在MySQL中执行TRUNCATE db_name.tbl_name

下表包含特定于ndb_delete_all的选项 其他说明在表格后面。有关大多数NDB群集程序(包括ndb_delete_all)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.314 ndb_delete_all程序的命令行选项

格式 描述 已添加,已弃用或已删除

--database=dbname

-d

在其中找到该表的数据库的名称

所有基于MySQL 5.7的版本

--transactional

-t

在单个事务中执行删除操作(可能会用完操作)

所有基于MySQL 5.7的版本

--tupscan

运行tup扫描

所有基于MySQL 5.7的版本

--diskscan

运行磁盘扫描

所有基于MySQL 5.7的版本


  • --transactional-t

    使用此选项会导致删除操作作为单个事务执行。

    警告

    对于非常大的表格,使用此选项可能会导致超出集群可用操作的数量。

21.4.10  ndb_desc - 描述NDB表

ndb_desc提供了一个或多个NDB的详细描述

用法

ndb_desc -c -d [ ]connection_string tbl_namedb_nameoptions
    
ndb_desc -c -d -tconnection_string index_namedb_nametbl_name

本节稍后会列出 可与ndb_desc一起使用的其他选项

示例输出

MySQL表创建和人口声明:

USE测试;

CREATE TABLE鱼(
    id INT(11)NOT NULL AUTO_INCREMENT,
    name VARCHAR(20)NOT NULL,
    length_mm INT(11)NOT NULL,
    weight_gm INT(11)NOT NULL,

    PRIMARY KEY PK(ID),
    UNIQUE KEY英国(名字)
)ENGINE = NDB;

插入鱼的值
    (NULL,'guppy',35,2),(NULL,'金枪鱼',2500,150000),
    (NULL,'shark',3000,110000),(NULL,'manta ray',1500,50000),
    (NULL,'grouper',900,125000),(NULL,'puffer',250,2500);

ndb_desc 输出

外壳> ./ndb_desc -c localhost fish -d test -p
- 鱼 - 
版本:2
片段类型:HashMapPartition
K值:6
最小载荷系数:78
最大负载率:80
临时表:没有
属性数量:4
主键数量:1
frm数据的长度:337
最大行数:0
行校验和:1
GCI行:1
SingleUserMode:0
ForceVarPart:1
PartitionCount:2
FragmentCount:2
PartitionBalance:FOR_RP_BY_LDM
ExtraRowGciBits:0
ExtraRowAuthorBits:0
TableStatus:已检索
表格选项:
HashMap:DEFAULT-HASHMAP-3840-2
- 属性 - 
id INT主键分配键AT = FIXED ST = MEMORY AUTO_INCR
名称Varchar(20; latin1_swedish_ci)NOT NULL AT = SHORT_VAR ST = MEMORY DYNAMIC
length_mm Int NOT NULL AT = FIXED ST = MEMORY DYNAMIC
weight_gm Int NOT NULL AT = FIXED ST = MEMORY DYNAMIC
- 索引 - 
PRIMARY KEY(id) -  UniqueHashIndex
PRIMARY(id) -  OrderedIndex
英国(名字) -  OrderedIndex
uk $ unique(name) -  UniqueHashIndex
- 每个分区信息 - 
分区行数提交计数碎片固定内存碎片变大的内存Extent_space自由的extent_space
0 2 2 32768 32768 0 0               
1 4 4 32768 32768 0 0               


NDBT_ProgramExit:0  - 确定

关于多个表的信息可以在ndb_desc的单个调用中通过使用它们的名称获得,并用空格分隔。所有表必须位于同一个数据库中。

您可以使用--table(short form :)-t选项获取有关特定索引的其他信息,并将索引的名称作为第一个参数提供给ndb_desc,如下所示:

外壳> ./ndb_desc uk -d test -t fish
- 英国 - 
版本:2
基地表:鱼
属性数量:1
日志记录:0
索引类型:OrderedIndex
索引状态:已检索
- 属性 - 
名称Varchar(20; latin1_swedish_ci)NOT NULL AT = SHORT_VAR ST = MEMORY
-  IndexTable 10 / uk  - 
版本:2
片段类型:FragUndefined
K值:6
最小载荷系数:78
最大负载率:80
临时表:是的
属性数量:2
主键数量:1
frm数据的长度:0
最大行数:0
行校验和:1
GCI行:1
SingleUserMode:2
ForceVarPart:0
PartitionCount:2
FragmentCount:2
FragmentCountType:ONE_PER_LDM_PER_NODE
ExtraRowGciBits:0
ExtraRowAuthorBits:0
TableStatus:已检索
表格选项:
- 属性 - 
名称Varchar(20; latin1_swedish_ci)NOT NULL AT = SHORT_VAR ST = MEMORY
NDB $ TNODE无符号[64]主键分配键AT =固定ST =存储器
- 索引 - 
PRIMARY KEY(NDB $ TNODE) -  UniqueHashIndex

NDBT_ProgramExit:0  - 确定

当以这种方式指定索引时, --extra-partition-info--extra-node-info选项不起作用。

Version输出列包含表的模式对象的版本。有关解释此值的信息,请参阅 NDB模式对象版本

ndb_desc输出中也可以看到 可以使用NDB_TABLE嵌入在CREATE TABLEALTER TABLE语句中的注释 设置的三个表属性 该表 总是显示在 列中。 并且 ,如果设定为1,示出了在塔中。你可以mysql 客户端执行以下语句后看到这个FRAGMENT_COUNT_TYPEFragmentCountTypeREAD_ONLYFULLY_REPLICATEDTable optionsALTER TABLE

MySQL的> ALTER TABLE fish COMMENT='NDB_TABLE=READ_ONLY=1,FULLY_REPLICATED=1';
1行,1警告(0.00秒)

MySQL的> SHOW WARNINGS\G
+ --------- + ------ + -------------------------------- -------------------------------------------------- ----------------------- +
| 级别| 代码| 留言|
+ --------- + ------ + -------------------------------- -------------------------------------------------- ----------------------- +
| 警告| 1296 | 有错误4503'表属性是FRAGMENT_COUNT_TYPE = ONE_PER_LDM_PER_NODE,但不在评论中'来自NDB |
+ --------- + ------ + -------------------------------- -------------------------------------------------- ----------------------- +
一排(0.00秒)

发出警告是因为READ_ONLY=1 要求表的分段计数类型是(或设置为)ONE_PER_LDM_PER_NODE_GROUP; NDB在这种情况下自动设置。您可以ALTER TABLE使用SHOW CREATE TABLE以下命令来检查语句是否具有所需的效果

MySQL的> SHOW CREATE TABLE fish\G
*************************** 1. row ******************** *******
       表:鱼
创建表:CREATE TABLE`fish`(
  `id` int(11)NOT NULL AUTO_INCREMENT,
  `name` varchar(20)NOT NULL,
  `length_mm` int(11)NOT NULL,
  `weight_gm` int(11)NOT NULL,
  PRIMARY KEY(`id`),
  UNIQUE KEY`uk`(`name`)
)ENGINE = ndbcluster DEFAULT CHARSET = latin1
COMMENT = 'NDB_TABLE = READ_BACKUP = 1,FULLY_REPLICATED = 1'
一排(0.01秒)

由于FRAGMENT_COUNT_TYPE没有明确设置,因此其值不会显示在打印的评论文本中SHOW CREATE TABLE但是,ndb_desc会显示此属性的更新值。Table options列显示刚刚启用的二进制属性。你可以在这里显示的输出中看到这个(强调文本):

外壳> ./ndb_desc -c localhost fish -d test -p
- 鱼 - 
版本:4
片段类型:HashMapPartition
K值:6
最小载荷系数:78
最大负载率:80
临时表:没有
属性数量:4
主键数量:1
frm数据长度:380
最大行数:0
行校验和:1
GCI行:1
SingleUserMode:0
ForceVarPart:1
PartitionCount:1
FragmentCount:1
FragmentCountType:ONE_PER_LDM_PER_NODE_GROUP
ExtraRowGciBits:0
ExtraRowAuthorBits:0
TableStatus:已检索
表选项:readbackup,完全复制
HashMap:DEFAULT-HASHMAP-3840-1
- 属性 - 
id INT主键分配键AT = FIXED ST = MEMORY AUTO_INCR
名称Varchar(20; latin1_swedish_ci)NOT NULL AT = SHORT_VAR ST = MEMORY DYNAMIC
length_mm Int NOT NULL AT = FIXED ST = MEMORY DYNAMIC
weight_gm Int NOT NULL AT = FIXED ST = MEMORY DYNAMIC
- 索引 - 
PRIMARY KEY(id) -  UniqueHashIndex
PRIMARY(id) -  OrderedIndex
英国(名字) -  OrderedIndex
uk $ unique(name) -  UniqueHashIndex
- 每个分区信息 - 
分区行数提交计数碎片固定内存碎片变大的内存Extent_space自由的extent_space

NDBT_ProgramExit:0  - 确定

有关这些表属性的更多信息,请参见 第13.1.18.10节“设置NDB_TABLE选项”

Extent_spaceFree extent_space唯一的列是适用 NDB具有在磁盘上的列的表; 对于只有内存列的表,这些列始终包含该值0

为了说明它们的用法,我们修改前面的例子。首先,我们必须创建必要的磁盘数据对象,如下所示:

创建日志文件组lg_1
    ADD UNDOFILE'undo_1.log'
    INITIAL_SIZE 16M
    UNDO_BUFFER_SIZE 2M
    ENGINE NDB;

ALTER LOGFILE GROUP lg_1
    ADD UNDOFILE'undo_2.log'
    INITIAL_SIZE 12M
    ENGINE NDB;

创建表格空间ts_1
    ADD DATAFILE'data_1.dat'
    使用日志文件组lg_1
    INITIAL_SIZE 32M
    ENGINE NDB;

ALTER TABLESPACE ts_1
    ADD DATAFILE'data_2.dat'
    INITIAL_SIZE 48M
    ENGINE NDB;

(有关刚刚显示的语句及其创建的对象的更多信息,请参见 第21.5.13.1节“NDB集群磁盘数据对象”以及 第13.1.15节“CREATE LOGFILE GROUP语法”第13.1.19节,“CREATE TABLESPACE Syntax”。)

现在我们可以创建并填充 fish在磁盘上存储其列的两个表的版本(如果已经存在,先删除表格的先前版本):

CREATE TABLE鱼(
    id INT(11)NOT NULL AUTO_INCREMENT,
    name VARCHAR(20)NOT NULL,
    length_mm INT(11)NOT NULL,
    weight_gm INT(11)NOT NULL,

    PRIMARY KEY PK(ID),
    UNIQUE KEY英国(名字)
)TABLESPACE ts_1存储磁盘
ENGINE = NDB;

插入鱼的值
    (NULL,'guppy',35,2),(NULL,'金枪鱼',2500,150000),
    (NULL,'shark',3000,110000),(NULL,'manta ray',1500,50000),
    (NULL,'grouper',900,125000),(NULL,'puffer',250,2500);

当针对此版本的表运行时, ndb_desc显示以下输出:

外壳> ./ndb_desc -c localhost fish -d test -p
- 鱼 - 
版本:1
片段类型:HashMapPartition
K值:6
最小载荷系数:78
最大负载率:80
临时表:没有
属性数量:4
主键数量:1
frm数据长度:346
最大行数:0
行校验和:1
GCI行:1
SingleUserMode:0
ForceVarPart:1
PartitionCount:2
FragmentCount:2
FragmentCountType:ONE_PER_LDM_PER_NODE
ExtraRowGciBits:0
ExtraRowAuthorBits:0
TableStatus:已检索
表格选项:
HashMap:DEFAULT-HASHMAP-3840-2
- 属性 - 
id INT主键分配键AT = FIXED ST = MEMORY AUTO_INCR
名称Varchar(20; latin1_swedish_ci)NOT NULL AT = SHORT_VAR ST = MEMORY
length_mm Int NOT NULL AT = FIXED ST = DISK
weight_gm Int NOT NULL AT = FIXED ST = DISK
- 索引 - 
PRIMARY KEY(id) -  UniqueHashIndex
PRIMARY(id) -  OrderedIndex
英国(名字) -  OrderedIndex
uk $ unique(name) -  UniqueHashIndex
- 每个分区信息 - 
分区行数提交计数碎片固定内存碎片变大的内存Extent_space自由的extent_space
0 2 2 32768 32768 1048576 1044440        
1 4 4 32768 32768 1048576 1044400        


NDBT_ProgramExit:0  - 确定

这意味着从每个分区上的该表的表空间分配1048576个字节,其中1044440个字节保持空闲以用于附加存储。换句话说,每个分区1048576 - 1044440 = 4136字节当前正用于存储此表的基于磁盘的列中的数据。显示的字节数Free extent_space仅用于存储fish 表中的磁盘列数据; 出于这个原因,从INFORMATION_SCHEMA.FILES 表中选择时不可见

对于完全复制的表,ndb_desc仅显示包含主分区片段副本的节点; 具有副本片段副本的节点(仅限)将被忽略。与NDB 7.5.4开始,您可以获取这些信息,使用 MySQL的客户端,从 table_distribution_statustable_fragmentstable_info,并 table_replicas在表 ndbinfo的数据库。

下表包含特定于ndb_desc的选项 其他说明在表格后面。有关大多数NDB群集程序(包括ndb_desc)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.315 ndb_desc程序的命令行选项

格式 描述 已添加,已弃用或已删除

--blob-info

-b

在输出中包含BLOB表的分区信息。需要使用-p选项

所有基于MySQL 5.7的版本

--database=dbname

-d

包含表的数据库的名称

所有基于MySQL 5.7的版本

--extra-node-info

-n

在输出中包含分区到数据节点的映射。需要使用-p选项

所有基于MySQL 5.7的版本

--extra-partition-info

-p

显示有关分区的信息

所有基于MySQL 5.7的版本

--retries=#

-r

重试连接的次数(每秒一次)

所有基于MySQL 5.7的版本

--table=tbl_name

-t

指定要在其中查找索引的表格。当使用此选项时,-p和-n不起作用并被忽略。

所有基于MySQL 5.7的版本

--unqualified

-u

使用不合格的表名

所有基于MySQL 5.7的版本


  • --blob-info-b

    包括关于下属 BLOBTEXT列的信息。

    使用此选项还需要使用 --extra-partition-info-p)选项。

  • --database=db_name-d

    指定应在其中找到表的数据库。

  • --extra-node-info-n

    包含有关表分区和它们驻留的数据节点之间映射的信息。这些信息可用于验证分发感知机制并支持更高效地访问NDB集群中存储的数据。

    使用此选项还需要使用 --extra-partition-info-p)选项。

  • --extra-partition-info-p

    打印有关表格分区的其他信息。

  • --retries=#-r

    在放弃之前尝试连接多次。每秒进行一次连接尝试。

  • --table=tbl_name-t

    指定要在其中查找索引的表格。

  • --unqualified-u

    使用不合格的表名。

在NDB 7.5.3和更高版本中,输出中列出的表索引按ID排序。以前,这不是确定性的,可能因平台而异。(错误#81763,错误#23547742)

21.4.11  ndb_drop_index - 从NDB表中删除索引

ndb_drop_indexNDB表中删除指定的索引建议您仅将此实用程序用作编写NDB API应用程序的示例 - 有关详细信息,请参阅本节后面的警告。

用法

ndb_drop_index -c -dconnection_string table_name indexdb_name

上面显示的语句删除名为该指数 indextabledatabase

下表包含特定于ndb_drop_index的选项 其他说明在表格后面。有关大多数NDB群集程序(包括ndb_drop_index)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.316 ndb_drop_index程序的命令行选项

格式 描述 已添加,已弃用或已删除

--database=dbname

-d

在其中找到该表的数据库的名称

所有基于MySQL 5.7的版本


警告

使用NDB API在集群表索引上执行的操作对MySQL不可见,并且使该表对MySQL服务器不可用如果您使用该程序删除索引,则尝试从SQL节点访问该表,结果如下所示:

外壳> ./ndb_drop_index -c localhost dogs ix -d ctest1
滴指数狗/ idx ...好的

NDBT_ProgramExit:0  - 确定

外壳> ./mysql -u jon -p ctest1
输入密码: *******
阅读表格信息以完成表格和列名称
您可以关闭此功能以使用-A更快启动

欢迎来到MySQL监视器。命令结束于; 或\ g。
你的MySQL连接ID是7到服务器版本:5.7.22-ndb-7.5.11

键入'help' 或'\ h'寻求帮助。输入'\ c'清除缓冲区。

MySQL的> SHOW TABLES;
+ ------------------ +
| Tables_in_ctest1 |
+ ------------------ +
| a |
| bt1 |
| bt2 |
| 狗|
| 员工|
| 鱼|
+ ------------------ +
设置6行(0.00秒)

mysql> ERROR 1296(HY000):从NDBCLUSTER得到错误4243'Index not found'SELECT * FROM dogs;

在这种情况下,将表提供给MySQL的唯一选择是删除表并重新创建它。您可以使用SQL语句DROP TABLEndb_drop_table实用程序(请参见 第21.4.12节“ ndb_drop_table - 删除NDB表”)删除表。

21.4.12  ndb_drop_table - 删除一个NDB表

ndb_drop_table删除指定的 NDB表。(如果尝试在使用除存储引擎以外的其他存储引擎创建的表上使用此项 NDB,则尝试将失败,并显示错误723:不存在此类表。)此操作速度非常快; 在某些情况下,它可能比DROP TABLENDB使用MySQL语句快一个数量级

用法

ndb_drop_table -c -dconnection_string tbl_namedb_name

下表包含特定于ndb_drop_table的选项 其他说明在表格后面。有关大多数NDB群集程序(包括ndb_drop_table)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.317 ndb_drop_table程序的命令行选项

格式 描述 已添加,已弃用或已删除

--database=dbname

-d

在其中找到该表的数据库的名称

所有基于MySQL 5.7的版本


21.4.13  ndb_error_reporter - NDB错误报告实用程序

ndb_error_reporter根据数据节点和管理节点日志文件创建归档文件,可用于帮助诊断群集中的错误或其他问题。强烈建议您在提交NDB群集中的错误报告时使用此实用程序

下表包含特定于NDB集群程序ndb_error_reporter的命令选项其他说明在表格后面。有关大多数NDB群集程序(包括 ndb_error_reporter)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.318 ndb_error_reporter程序的命令行选项

格式 描述 已添加,已弃用或已删除

--connection-timeout=timeout

超时前连接到节点时等待的秒数。

所有基于MySQL 5.7的版本

--dry-scp

禁用远程主机的scp; 仅用于测试。

所有基于MySQL 5.7的版本

--fs

将文件系统数据包含在错误报告中; 可以使用大量的磁盘空间

所有基于MySQL 5.7的版本

--skip-nodegroup=nodegroup_id

跳过具有此ID的节点组中的所有节点。

所有基于MySQL 5.7的版本


用法

ndb_error_reporter path/to/config-file[ username] [ options]

此实用程序旨在用于管理节点主机,并需要管理主机配置文件(通常为named config.ini的路径或者,您可以提供能够使用SSH访问群集数据节点的用户的名称,以复制数据节点日志文件。 然后,ndb_error_reporter将所有这些文件包含在与其运行所在的同一目录中创建的存档中。存档被命名 ,其中是日期时间字符串。 ndb_error_report_YYYYMMDDHHMMSS.tar.bz2YYYYMMDDHHMMSS

ndb_error_reporter也接受这里列出的选项:

  • --connection-timeout=timeout

    属性
    命令行格式 --connection-timeout=timeout
    类型 整数
    默认 0

    在超时之前尝试连接节点时等待几秒钟。

  • --dry-scp

    属性
    命令行格式 --dry-scp
    类型 布尔
    默认 TRUE

    运行ndb_error_reporter而不使用远程主机的scp。仅用于测试。

  • --fs

    属性
    命令行格式 --fs
    类型 布尔
    默认 FALSE

    将数据节点文件系统复制到管理主机并将其包含在存档中。

    由于数据节点的文件系统可能非常大,即使被压缩后,我们请您不要 使用此选项,Oracle创建发送档案,除非你被特别要求这样做。

  • --skip-nodegroup=nodegroup_id

    属性
    命令行格式 --connection-timeout=timeout
    类型 整数
    默认 0

    跳过属于具有提供的节点组ID的节点组的所有节点。

21.4.14  ndb_import - 将CSV数据导入NDB

ndb_import将 CSV格式的数据导入到 NDB使用NDB API,该NDB API需要连接到NDB管理服务器。不需要连接到MySQL服务器。

用法

ndb_import db_name file_name options

ndb_import需要两个参数。 db_name是在其中找到要将数据导入其中的数据库的数据库所在的数据库的名称; file_name是从中读取数据的CSV文件的名称,如果该文件不在当前目录中,则包括该文件的路径。文件的名称必须与表的名称匹配; 该文件的扩展,如果有的话,不被纳入考虑范围。还支持其他参数(本节稍后介绍),包括用于指定字段分隔符,转义和行结束符的选项。ndb_import必须能够连接到NDB群集管理服务器; 为此,必须有一个未使用的[api]插槽中的 config.ini文件。

若要重复使用不同的存储引擎,比如现有的表InnoDB,作为一个 NDB表,使用MySQL的 客户端执行 SELECT INTO OUTFILE的语句到现有的表导出为CSV文件,然后执行 CREATE TABLE LIKE语句来创建具有相同的新表结构作为现有表,然后ALTER TABLE ... ENGINE=NDB在新表上执行 ; 之后,从系统shell中调用ndb_import将数据加载到新NDB表中。例如,InnoDB名为myinnodb_table数据库 的现有myinnodb可以导出到 NDB名为表中 myndb_tablemyndb如此处所示命名的数据库 中,假设您已经以具有相应权限的MySQL用户身份登录:

  1. mysql客户端中:

    MySQL的> USE myinnodb;
    
    的MySQL> SELECT * INTO OUTFILE '/tmp/myndb_table.csv'
         >   FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\'
         >   LINES TERMINATED BY '\n'
         >  FROM myinnodbtable;
    
    MySQL的> CREATE DATABASE myndb;
    
    MySQL的> USE myndb;
    
    MySQL的> CREATE TABLE myndb_table LIKE myinnodb.myinnodb_table;
    
    MySQL的> ALTER TABLE myndb_table ENGINE=NDB;
    
    MySQL的> EXIT;
    再见
    外壳>
    

    一旦创建了目标数据库和表,就不再需要正在运行的mysqld如果您愿意,可以在继续之前使用mysqladmin shutdown或其他方法来停止它

  2. 在系统shell中:

    #如果你还没有在MySQL bin目录中:
    外壳> cd path-to-mysql-bin-dir
    
    外壳> ndb_import myndb /tmp/myndb_table.csv --fields-optionally-enclosed-by='"' \
        --fields-terminated-by="," --fields-escaped-by='\\'
    

    输出应该类似于这里显示的内容:

    job-1从/tmp/myndb_table.csv中导入myndb.myndb_table
    job-1 [running]从/tmp/myndb_table.csv中导入myndb.myndb_table
    job-1 [成功]从/tmp/myndb_table.csv中导入myndb.myndb_table
    job-1在0h0m9s以2277行/ s的速度导入了19984行
    工作总结:定义:1运行:1成功:1失败:0
    外壳>
    

下表包含特定于ndb_import的选项 其他说明在表格后面。有关大多数NDB群集程序(包括ndb_import)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.319 ndb_import程序的命令行选项

格式 描述 已添加,已弃用或已删除

--abort-on-error

在任何致命错误上转储核心; 用于调试

ADDED:NDB 7.6.2

--ai-increment=#

对于隐藏PK的表格,指定自动增量增量。请参阅mysqld

ADDED:NDB 7.6.2

--ai-offset=#

对于隐藏PK的表,指定自动增量偏移量。请参阅mysqld

ADDED:NDB 7.6.2

--ai-prefetch-sz=#

对于隐藏PK的表,指定预取的自动增量值的数量。请参阅mysqld

ADDED:NDB 7.6.2

--connections=#

要创建的群集连接数

ADDED:NDB 7.6.2

--continue

工作失败时,继续下一份工作

ADDED:NDB 7.6.2

--db-workers=#

每个数据节点执行数据库操作的线程数

ADDED:NDB 7.6.2

--errins-type=name

错误插入类型,用于测试目的; 使用“列表”获取所有可能的值

ADDED:NDB 7.6.2

--errins-delay=#

错误插入延迟毫秒; 随机变化被添加

ADDED:NDB 7.6.2

--fields-enclosed-by=char

与LOAD DATA语句的FIELDS ENCLOSED BY选项相同。对于CSV输入,这与使用--fields-optional-enclosed-by相同

ADDED:NDB 7.6.2

--fields-escaped-by=name

与LOAD DATA语句的FIELDS ESCAPED BY选项相同

ADDED:NDB 7.6.2

--fields-optionally-enclosed-by=char

与LOAD DATA语句的OPELEDALLY ENCLOSED BY选项相同

ADDED:NDB 7.6.2

--fields-terminated-by=char

与LOAD DATA语句的FIELDS TERMINATED BY选项相同。

ADDED:NDB 7.6.2

--idlesleep=#

睡眠等待更多的毫秒数

ADDED:NDB 7.6.2

--idlespin=#

在闲置之前重新尝试的次数

ADDED:NDB 7.6.2

--ignore-lines=#

忽略输入文件中的第一行#行。用于跳过非数据标题。

ADDED:NDB 7.6.2

--input-type=name

输入类型:随机或csv

ADDED:NDB 7.6.2

--input-workers=#

处理输入的线程数。如果--input-type是csv,则必须是2或更多。

ADDED:NDB 7.6.2

--lines-terminated-by=name

与LOAD DATA语句的LINES TERMINATED BY选项相同

ADDED:NDB 7.6.2

--max-rows=#

仅导入此数量的输入数据行; 默认值为0,它导入所有行

ADDED:NDB 7.6.2

--monitor=#

定期打印正在运行的作业的状态(状态,被拒绝的行,临时错误)。值0禁用。值1打印所看到的任何变化。较高的值会将状态打印按指数规律减少到某个预定义的限制。

ADDED:NDB 7.6.2

--no-asynch

在单个事务中以批处理方式运行数据库操作

ADDED:NDB 7.6.2

--no-hint

不要使用分配键提示来选择数据节点(TC)

ADDED:NDB 7.6.2

--opbatch=#

数据库执行批处理是发送到NDB内核的一组事务和操作。此选项限制数据库执行批处理中的NDB操作(包括blob操作)。因此它也限制了异步交易的数量。值0无效

ADDED:NDB 7.6.2

--opbytes=#

限制执行批次中的字节数(默认值0 =无限制)

ADDED:NDB 7.6.2

--output-type=name

输出类型:ndb是默认的,null用于测试

ADDED:NDB 7.6.2

--output-workers=#

处理输出或中继数据库操作的线程数

ADDED:NDB 7.6.2

--pagesize=#

将I / O缓冲区与给定的大小对齐

ADDED:NDB 7.6.2

--pagecnt=#

I / O缓冲区的大小为页面大小的倍数。CSV输入工作人员分配一个双倍大小的缓冲区

ADDED:NDB 7.6.2

--polltimeout=#

完成异步交易的每次轮询超时; 轮询继续,直到所有民意调查完成,或发生错误

ADDED:NDB 7.6.2

--rejects=#

限制数据加载中被拒绝的行数(具有永久性错误的行)。默认值为0,这意味着任何被拒绝的行都会导致致命错误。超过限制的行也被添加到* .rej

ADDED:NDB 7.6.2

--resume

如果作业中止(暂时错误,用户中断),则恢复尚未处理的行

ADDED:NDB 7.6.2

--rowbatch=#

限制行队列中的行(默认0 =无限制); 如果--input-type是随机的,则必须是1或更多

ADDED:NDB 7.6.2

--rowbytes=#

限制行队列中的字节数(0 =无限制)

ADDED:NDB 7.6.2

--state-dir=name

在哪里写状态文件; currect目录是默认的

ADDED:NDB 7.6.2

--tempdelay=#

在临时错误之间休眠的毫秒数

ADDED:NDB 7.6.2

--temperrors=#

由于每个执行批次的临时错误导致事务失败的次数; 0表示任何临时错误都是致命的。这样的错误不会导致任何行被写入.rej文件

ADDED:NDB 7.6.2

--verbose=#

-v

调试消息的详细程度级别(调试构建的最大值为4)

ADDED:NDB 7.6.2


  • --abort-on-error

    属性
    命令行格式 --abort-on-error
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 布尔
    默认(> = 5.7.18-ndb-7.6.2) FALSE

    在任何致命错误上转储核心; 仅用于调试。

  • --ai-increment=#

    属性
    命令行格式 --ai-increment=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 1
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    对于具有隐藏主键的表,指定自动增量增量,就像 auto_increment_increment 系统变量在MySQL服务器中所做的那样。

  • --ai-offset=#

    属性
    命令行格式 --ai-offset=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 1
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    对于具有隐藏主键的表格,指定自动增量偏移量。类似于 auto_increment_offset 系统变量。

  • --ai-prefetch-sz=#

    属性
    命令行格式 --ai-prefetch-sz=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 1024
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    对于具有隐藏主键的表,指定预取的自动增量值的数量。就像ndb_autoincrement_prefetch_sz MySQL服务器中系统变量一样。

  • --connections=#

    属性
    命令行格式 --connections=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 1
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    要创建的群集连接数。

  • --continue

    属性
    命令行格式 --continue
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 布尔
    默认(> = 5.7.18-ndb-7.6.2) FALSE

    当工作失败时,继续下一份工作。

  • --db-workers=#

    属性
    命令行格式 --db-workers=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 1
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    每个数据节点执行数据库操作的线程数。

  • --errins-type=name

    属性
    命令行格式 --errins-type=name
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 列举
    默认(> = 5.7.18-ndb-7.6.2) [none]
    有效值(> = 5.7.18-ndb-7.6.2)

    stopjob

    stopall

    sighup

    sigint

    list

    错误插入类型; 使用list作为 name值,以获得所有可能的值。该选项仅用于测试目的。

  • --errins-delay=#

    属性
    命令行格式 --errins-delay=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 1000
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    错误插入延迟毫秒; 随机变化被添加。该选项仅用于测试目的。

  • --fields-enclosed-by=char

    属性
    命令行格式 --fields-enclosed-by=char
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2)
    默认(> = 5.7.18-ndb-7.6.2) [none]

    这与FIELDS ENCLOSED BY选项对LOAD DATA语句的操作方式相同,将字符指定为引用字段值。对于CSV输入,这与之相同 --fields-optionally-enclosed-by

  • --fields-escaped-by=name

    属性
    命令行格式 --fields-escaped-by=name
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2)
    默认(> = 5.7.18-ndb-7.6.2) \

    FIELDS ESCAPED BY以与SQL LOAD DATA语句选项 相同的方式指定转义字符

  • --fields-optionally-enclosed-by=char

    属性
    命令行格式 --fields-optionally-enclosed-by=char
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2)
    默认(> = 5.7.18-ndb-7.6.2) [none]

    这与FIELDS OPTIONALLY ENCLOSED BY选项对 LOAD DATA语句的操作方式相同,将字符指定为可选的引用字段值。对于CSV输入,这与之相同 --fields-enclosed-by

  • --fields-terminated-by=char

    属性
    命令行格式 --fields-terminated-by=char
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2)
    默认(> = 5.7.18-ndb-7.6.2) \t

    这与FIELDS TERMINATED BY选项对LOAD DATA语句的操作方式相同,将字符指定为字段分隔符。

  • --idlesleep=#

    属性
    命令行格式 --idlesleep=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 1
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    睡眠等待更多工作执行的毫秒数。

  • --idlespin=#

    属性
    命令行格式 --idlespin=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 0
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    睡眠前重试的次数。

  • --ignore-lines=#

    属性
    命令行格式 --ignore-lines=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 0
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    导致ndb_import忽略#输入文件的第一 行。这可以用来跳过不包含任何数据的文件头。

  • --input-type=name

    属性
    命令行格式 --input-type=name
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 列举
    默认(> = 5.7.18-ndb-7.6.2) csv
    有效值(> = 5.7.18-ndb-7.6.2)

    random

    csv

    设置输入类型的类型。默认是 csv; random仅用于测试目的。

  • --input-workers=#

    属性
    命令行格式 --input-workers=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 2
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    设置处理输入的线程数量。

  • --lines-terminated-by=name

    属性
    命令行格式 --lines-terminated-by=name
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2)
    默认(> = 5.7.18-ndb-7.6.2) \n

    这与LINES TERMINATED BY选项对LOAD DATA语句的操作方式相同,将字符指定为行尾。

  • --max-rows=#

    属性
    命令行格式 --max-rows=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 0
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    仅导入此数量的输入数据行; 缺省值是0,它导入所有行。

  • --monitor=#

    属性
    命令行格式 --monitor=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 2
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    定期打印正在运行的作业的状态(状态,被拒绝的行,临时错误)。设置为0可禁用此报告。设置为1会打印出现的任何更改。较高的值可降低此状态报告的频率。

  • --no-asynch

    属性
    命令行格式 --no-asynch
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 布尔
    默认(> = 5.7.18-ndb-7.6.2) FALSE

    在单个事务中以批处理方式运行数据库操作。

  • --no-hint

    属性
    命令行格式 --no-hint
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 布尔
    默认(> = 5.7.18-ndb-7.6.2) FALSE

    不要使用分配键提示选择数据节点。

  • --opbatch=#

    属性
    命令行格式 --opbatch=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 256
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    设置操作次数(包括blob操作)的限制,以及每个执行批次的异步事务数。

  • --opbytes=#

    属性
    命令行格式 --opbytes=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 0
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    设置每个执行批次的字节数限制。使用0表示无限制。

  • --output-type=name

    属性
    命令行格式 --output-type=name
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 列举
    默认(> = 5.7.18-ndb-7.6.2) ndb
    有效值(> = 5.7.18-ndb-7.6.2) null

    设置输出类型。ndb是默认值。 null仅用于测试。

  • --output-workers=#

    属性
    命令行格式 --output-workers=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 2
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    设置处理输出或中继数据库操作的线程数量。

  • --pagesize=#

    属性
    命令行格式 --pagesize=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 4096
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    将I / O缓冲区与给定大小对齐。

  • --pagecnt=#

    属性
    命令行格式 --pagecnt=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 64
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    将I / O缓冲区的大小设置为页面大小的倍数。CSV输入工作人员分配大小加倍的缓冲区。

  • --polltimeout=#

    属性
    命令行格式 --polltimeout=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 1000
    最小值(> = 5.7.18-ndb-7.6.2) 1
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    为完成的异步事务设置每次轮询的超时时间; 轮询继续,直到所有轮询都完成,或直到发生错误。

  • --rejects=#

    属性
    命令行格式 --rejects=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 0
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    限制数据加载中被拒绝的行数(具有永久性错误的行)。默认值为0,这意味着任何被拒绝的行都会导致致命错误。导致超出限制的行将添加到 .rej文件中。

  • --resume

    属性
    命令行格式 --resume
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 布尔
    默认(> = 5.7.18-ndb-7.6.2) FALSE

    如果作业中止(由于临时数据库错误或被用户中断),请恢复任何尚未处理的行。

  • --rowbatch=#

    属性
    命令行格式 --rowbatch=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 0
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    设置每个行队列的行数限制。使用0表示无限制。

  • --rowbytes=#

    属性
    命令行格式 --rowbytes=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 262144
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    设置每个行队列的字节数限制。使用0表示无限制。

  • --state-dir=name

    属性
    命令行格式 --state-dir=name
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2)
    默认(> = 5.7.18-ndb-7.6.2) .

    在哪里写入状态文件(tbl_name.maptbl_name.rejtbl_name.res,和 tbl_name.stt通过该程序的运行。生产); 默认是当前目录。

  • --tempdelay=#

    属性
    命令行格式 --tempdelay=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 10
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    在临时错误之间休眠的毫秒数。

  • --temperrors=#

    属性
    命令行格式 --temperrors=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 0
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 4294967295

    由于每个执行批次的临时错误导致事务失败的次数。默认值是0,这意味着任何临时错误都是致命的。临时错误不会导致将任何行添加到.rej 文件中。

  • --verbose= #-v

    属性
    命令行格式 --verbose=#
    介绍 5.7.18-NDB-7.6.2
    类型(> = 5.7.18-ndb-7.6.2) 整数
    默认(> = 5.7.18-ndb-7.6.2) 0
    最小值(> = 5.7.18-ndb-7.6.2) 0
    最大(> = 5.7.18-ndb-7.6.2) 2

    用于调试消息的详细级别。

与此同时LOAD DATA INFILE,字段和行格式的选项与用于创建CSV文件的选项非常相似,无论这是使用SELECT INTO OUTFILE或通过其他方式完成的。没有等同于LOAD DATA INFILE 声明的STARTING WITH选项。

NDB 7.6.2中添加了 ndb_import

21.4.15  ndb_index_stat - NDB指数统计工具

ndb_index_stat提供有关NDB 表的索引的每片段统计信息这包括缓存版本和年限,每个分区的索引条目数量以及索引的内存消耗。

用法

要获得有关给定NDB表的基本索引统计信息 按照此处所示调用 ndb_index_stat,并将该表的名称作为第一个参数,并且紧接其后指定包含该表的数据库的名称,使用--database-d)选项)选项:

ndb_index_stat table-ddatabase

在这个例子中,我们使用ndb_index_stat来获取关于 数据库NDB中命名mytabletest信息:

外壳> ndb_index_stat -d test mytable
表:城市指数:PRIMARY fragCount:2
sampleVersion:3 loadTime:1399585986 sampleCount:1994 keyBytes:7976
query cache:valid:1 sampleCount:1994 totalBytes:27916
以毫秒为单位的时间:节省:7.133排序:每种样品1.974种:0.000

NDBT_ProgramExit:0  - 确定

sampleVersion是从中获取统计数据的缓存的版本号。使用该 选项运行 ndb_index_stat--update会导致sampleVersion增加。

loadTime显示缓存最近一次更新的时间。这表示为自Unix纪元以来的秒数。

sampleCount是每个分区找到的索引条目的数量。您可以通过将其与片段数相乘来估计条目总数(如图所示 fragCount)。

sampleCount可以用的基数进行比较SHOW INDEX或者 INFORMATION_SCHEMA.STATISTICS,虽然后两种提供表作为一个整体的视图,而ndb_index_stat提供每个片段的平均值。

keyBytes是索引使用的字节数。在这个例子中,主键是一个整数,每个索引需要4个字节,所以 keyBytes在这种情况下可以计算出来,如下所示:

    keyBytes = sampleCount *(每个索引4个字节)= 1994 * 4 = 7976

这些信息也可以使用相应的列定义 INFORMATION_SCHEMA.COLUMNS(这需要MySQL服务器和MySQL客户端应用程序)来获得。

totalBytes 是表中所有索引消耗的总内存,以字节为单位。

前面示例中显示的时间对每次调用ndb_index_stat都是特定的

--verbose选项提供了一些额外的输出,如下所示:

外壳> ndb_index_stat -d test mytable --verbose
随机种子1337010518
连接的
循环1的1
表:mytable索引:PRIMARY fragCount:4
sampleVersion:2 loadTime:1336751773 sampleCount:0 keyBytes:0
阅读统计信息
查询缓存已创建
query cache:valid:1 sampleCount:0 totalBytes:0
次,以毫秒为单位:节省:20.766排序:0.001
断开的

NDBT_ProgramExit:0  - 确定

外壳>

如果程序的唯一输出是 NDBT_ProgramExit: 0 - OK,这可能表示尚未存在统计信息。要强制它们被创建(或者如果它们已经存在,则更新),使用该 选项调用 ndb_index_stat--update,或者ANALYZE TABLEmysql客户端的表上执行

选项

下表包含特定于NDB集群ndb_index_stat实用程序的选项。表中列出了其他说明。有关大多数NDB群集程序(包括 ndb_index_stat)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.320 ndb_index_stat程序的命令行选项

格式 描述 已添加,已弃用或已删除

--database=name

-d

包含该表的数据库的名称。

所有基于MySQL 5.7的版本

--delete

删除给定表的索引统计信息,停止以前配置的任何自动更新。

所有基于MySQL 5.7的版本

--update

更新给定表的索引统计信息,重新启动之前配置的任何自动更新。

所有基于MySQL 5.7的版本

--dump

打印查询缓存。

所有基于MySQL 5.7的版本

--query=#

对第一个关键字attr执行若干个随机范围查询(必须是int无符号)。

所有基于MySQL 5.7的版本

--sys-drop

删除NDB内核中的所有统计表和事件(所有统计数据丢失)

所有基于MySQL 5.7的版本

--sys-create

在NDB内核中创建所有统计表和事件,如果它们都不存在的话

所有基于MySQL 5.7的版本

--sys-create-if-not-exist

在NDB内核中创建不存在的统计表和事件。

所有基于MySQL 5.7的版本

--sys-create-if-not-valid

创建NDB内核中尚不存在的任何统计表或事件。在放弃任何无效之后。

所有基于MySQL 5.7的版本

--sys-check

验证是否存在NDB系统索引统计信息和事件表。

所有基于MySQL 5.7的版本

--sys-skip-tables

不要将sys- *选项应用于表格。

所有基于MySQL 5.7的版本

--sys-skip-events

不要将sys- *选项应用于事件。

所有基于MySQL 5.7的版本

--verbose

-v

打开详细输出

所有基于MySQL 5.7的版本

--loops=#

设置执行给定命令的次数。缺省值是0。

所有基于MySQL 5.7的版本


ndb_index_stat统计选项。  以下选项用于生成索引统计信息。他们使用给定的表格和数据库。它们不能与系统选项混合使用(请参阅 ndb_index_stat系统选项)。

  • --database=name-d name

    属性
    命令行格式 --database=name
    类型
    默认 [none]
    最低限度
    最大

    包含正在查询的表的数据库的名称。

  • --delete

    属性
    命令行格式 --delete
    类型 布尔
    默认 false
    最低限度
    最大

    删除给定表的索引统计信息,停止先前配置的任何自动更新。

  • --update

    属性
    命令行格式 --update
    类型 布尔
    默认 false
    最低限度
    最大

    更新给定表的索引统计信息,并重新启动之前配置的任何自动更新。

  • --dump

    属性
    命令行格式 --dump
    类型 布尔
    默认 false
    最低限度
    最大

    转储查询缓存的内容。

  • --query=#

    属性
    命令行格式 --query=#
    类型 数字
    默认 0
    最低限度 0
    最大 MAX_INT

    对第一个键属性执行随机范围查询(必须是int无符号)。

ndb_index_stat系统选项。  以下选项用于生成和更新NDB内核中的统计信息表。这些选项都不能与统计选项混合使用(请参阅 ndb_index_stat统计选项)。

  • --sys-drop

    属性
    命令行格式 --sys-drop
    类型 布尔
    默认 false
    最低限度
    最大

    删除NDB内核中的所有统计信息表和事件。 这会导致所有统计数据丢失

  • --sys-create

    属性
    命令行格式 --sys-create
    类型 布尔
    默认 false
    最低限度
    最大

    在NDB内核中创建所有统计表和事件。这只在以前没有任何一个存在时才有效。

  • sys-create-if-not-exist

    属性
    命令行格式 --sys-create-if-not-exist
    类型 布尔
    默认 false
    最低限度
    最大

    创建程序调用时尚不存在的任何NDB系统统计表或事件(或两者)。

  • --sys-create-if-not-valid

    属性
    命令行格式 --sys-create-if-not-valid
    类型 布尔
    默认 false
    最低限度
    最大

    在删除任何无效的NDB系统统计表或事件后,创建不存在的NDB系统统计表或事件。

  • --sys-check

    属性
    命令行格式 --sys-check
    类型 布尔
    默认 false
    最低限度
    最大

    验证NDB内核中是否存在所有必需的系统统计信息表和事件。

  • --sys-skip-tables

    属性
    命令行格式 --sys-skip-tables
    类型 布尔
    默认 false
    最低限度
    最大

    不要将任何--sys-*选项应用于任何统计表。

  • --sys-skip-events

    属性
    命令行格式 --sys-skip-events
    类型 布尔
    默认 false
    最低限度
    最大

    不要将任何--sys-*选项应用于任何事件。

  • --verbose

    属性
    命令行格式 --verbose
    类型 布尔
    默认 false
    最低限度
    最大

    打开详细输出。

  • --loops=#

    属性
    命令行格式 --loops=#
    类型 数字
    默认 0
    最低限度 0
    最大 MAX_INT

    重复命令这个次数(用于测试)。

21.4.16  ndb_move_data - NDB数据复制实用程序

ndb_move_data将数据从一个NDB表复制到另一个。

用法

该程序使用源表和目标表的名称进行调用; 这些中的任何一个或两个都可以使用数据库名称进行限定。两个表都必须使用NDB存储引擎。

ndb_move_data options source target

下表包含特定于ndb_move_data的选项 其他说明在表格后面。有关大多数NDB群集程序(包括ndb_move_data)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.321 ndb_move_data程序的命令行选项

格式 描述 已添加,已弃用或已删除

--abort-on-error

转储核心永久错误(调试选项)

所有基于MySQL 5.7的版本

--character-sets-dir=name

目录中的字符集

所有基于MySQL 5.7的版本

--database=dbname

-d

在其中找到该表的数据库的名称

所有基于MySQL 5.7的版本

--drop-source

所有行移动后删除源表

所有基于MySQL 5.7的版本

--error-insert

插入随机临时错误(测试选项)

所有基于MySQL 5.7的版本

--exclude-missing-columns

忽略源表或目标表中的额外列

所有基于MySQL 5.7的版本

--lossy-conversions

-l

允许将属性数据转换为较小类型时截断

所有基于MySQL 5.7的版本

--promote-attributes

-A

允许将属性数据转换为更大的类型

所有基于MySQL 5.7的版本

--staging-tries=x[,y[,z]]

指定尝试临时错误。格式是x [,y [,z]]其中x =最大尝试次数(0 =无限制),y =最小延迟(ms),z =最大延迟(ms)

所有基于MySQL 5.7的版本

--verbose

启用详细消息

所有基于MySQL 5.7的版本


  • --abort-on-error

    属性
    命令行格式 --abort-on-error
    类型 布尔
    默认 FALSE

    转储核心永久错误(调试选项)。

  • --character-sets-dir=name

    属性
    命令行格式 --character-sets-dir=name
    类型
    默认 [none]

    目录中的字符集。

  • --database= dbname-d

    属性
    命令行格式 --database=dbname
    类型
    默认 TEST_DB

    在其中找到该表的数据库的名称。

  • --drop-source

    属性
    命令行格式 --drop-source
    类型 布尔
    默认 FALSE

    所有行移动后删除源表。

  • --error-insert

    属性
    命令行格式 --error-insert
    类型 布尔
    默认 FALSE

    插入随机临时错误(测试选项)。

  • --exclude-missing-columns

    属性
    命令行格式 --exclude-missing-columns
    类型 布尔
    默认 FALSE

    忽略源表或目标表中的额外列。

  • --lossy-conversions-l

    属性
    命令行格式 --lossy-conversions
    类型 布尔
    默认 FALSE

    允许将属性数据转换为较小类型时截断。

  • --promote-attributes-A

    属性
    命令行格式 --promote-attributes
    类型 布尔
    默认 FALSE

    允许将属性数据转换为更大的类型。

  • --staging-tries=x[,y[,z]]

    属性
    命令行格式 --staging-tries=x[,y[,z]]
    类型
    默认 0,1000,60000

    指定尝试临时错误。格式为x [,y [,z]],其中x =最大尝试次数(0 =无限制),y =最小延迟(ms),z =最大延迟(ms)。

  • --verbose

    属性
    命令行格式 --verbose
    类型 布尔
    默认 FALSE

    启用详细消息。

21.4.17  ndb_perror - 获取NDB错误消息信息

给出其错误代码, ndb_perror显示有关NDB错误的信息。这包括错误消息,错误类型以及错误是永久还是临时。添加到NDB 7.6.4中的MySQL NDB群集分发中,它的目的是作为 perror的 替代品 --ndb

用法

ndb_perror [ options]error_code

ndb_perror不需要访问正在运行的NDB集群或任何节点(包括SQL节点)。要查看有关给定NDB错误的信息,请使用错误代码作为参数来调用该程序,如下所示:

外壳> ndb_perror 323
NDB错误代码323:节点组ID无效,节点组已存在:永久错误:应用程序错误

要仅显示错误消息,使用 --silent选项(缩写形式 -s调用 ndb_perror,如下所示:

外壳> ndb_perror -s 323
节点组ID无效,节点组已存在:永久错误:应用程序错误

perror一样ndb_perror 接受多个错误代码:

外壳> ndb_perror 321 1001
NDB错误代码321:无效的节点组ID:永久错误:应用程序错误
NDB错误代码1001:非法连接字符串

本节后面将介绍 用于ndb_perror的其他程序选项

ndb_perror替换 perror --ndb,从NDB 7.6.4开始不推荐使用,并且可能在将来版本的MySQL NDB集群中删除。为了在脚本和其他可能依赖 perror获取NDB错误信息的应用程序中更容易地进行替换 ndb_perror支持自己的虚拟 --ndb选项,该选项什么也不做。

下表包括特定于NDB集群程序ndb_perror的所有选项其他说明在表格后面。

表21.322 ndb_perror程序的命令行选项

格式 描述 已添加,已弃用或已删除

--help

-?

显示帮助文本

ADDED:NDB 7.6.4

--ndb

为了与应用程序的兼容性取决于旧版本的perror; 什么也没做

ADDED:NDB 7.6.4

--silent

-s

仅显示错误消息

ADDED:NDB 7.6.4

--version

-V

打印程序版本信息并退出

ADDED:NDB 7.6.4

--verbose

-v

详细输出; 用--silent禁用

ADDED:NDB 7.6.4


其他选项

  • --help-?

    属性
    命令行格式 --help
    介绍 19年7月5日 - NDB-7.6.4
    类型 布尔
    默认 TRUE

    显示程序帮助文本并退出。

  • --ndb

    属性
    命令行格式 --ndb
    介绍 19年7月5日 - NDB-7.6.4
    类型 布尔
    默认 TRUE

    与应用程序的兼容性取决于使用该程序选项的旧版perror--ndb该选项与ndb_perror一起使用时什么也不做,并且被它忽略。

  • --silent-s

    属性
    命令行格式 --silent
    介绍 19年7月5日 - NDB-7.6.4
    类型 布尔
    默认 TRUE

    仅显示错误消息。

  • --version-V

    属性
    命令行格式 --version
    介绍 19年7月5日 - NDB-7.6.4
    类型 布尔
    默认 TRUE

    打印程序版本信息并退出。

  • --verbose-v

    属性
    命令行格式 --verbose
    介绍 19年7月5日 - NDB-7.6.4
    类型 布尔
    默认 TRUE

    详细输出; 禁用 --silent

21.4.18  ndb_print_backup_file - 打印NDB备份文件内容

ndb_print_backup_file从集群备份文件获取诊断信息。

用法

ndb_print_backup_file file_name

file_name是集群备份文件的名称。这可以是集群备份目录中的任何文件(.Data.ctl.log文件)。这些文件位于子目录下的数据节点的备份目录中 ,其中 是备份的序列号。有关群集备份文件及其内容的更多信息,请参见 第21.5.3.1节“NDB群集备份概念”BACKUP-##

ndb_print_schema_filendb_print_sys_file类似(并且与大多数NDB打算在管理服务器主机上运行或连接到管理服务器的其他实用程序不同),ndb_print_backup_file 必须在群集数据节点上运行,因为它直接访问数据节点文件系统。因为它没有使用管理服务器,所以当管理服务器没有运行时,甚至当群集已经完全关闭时,可以使用该实用程序。

其他选项

没有。

21.4.19  ndb_print_file - 打印NDB磁盘数据文件内容

ndb_print_file从NDB集群磁盘数据文件获取信息。

用法

ndb_print_file [-v] [-q] file_name+

file_name是NDB群集磁盘数据文件的名称。接受多个文件名,以空格分隔。

ndb_print_schema_filendb_print_sys_file类似(并且与大多数NDB打算在管理服务器主机上运行或连接到管理服务器的其他实用程序不同),ndb_print_file必须在NDB群集数据节点上运行,因为它访问数据节点文件系统直。因为它没有使用管理服务器,所以当管理服务器没有运行时,甚至当群集已经完全关闭时,可以使用该实用程序。

其他选项

ndb_print_file支持以下选项:

  • -v:使输出详细。

  • -q:抑制输出(安静模式)。

  • --help-h-?:打印帮助信息。

有关更多信息,请参见 第21.5.13节“NDB群集磁盘数据表”

21.4.20  ndb_print_frag_file - 打印NDB片段列表文件内容

ndb_print_frag_file从群集片段列表文件中获取信息。它旨在用于帮助诊断数据节点重新启动的问题。

用法

ndb_print_frag_file file_name

file_name是与模式匹配的群集片段列表文件的名称 ,其中的数字范围为2至9,并且位于具有节点ID的数据节点的数据节点文件系统中,位于名为的目录中 ,其中每个片段文件都包含属于每个的片段的记录有关集群碎片文件的更多信息,请参阅 NDB集群数据节点文件系统目录文件SX.FragListXnodeidndb_nodeid_fs/DN/DBDIH/N12NDB

ndb_print_backup_filendb_print_sys_filendb_print_schema_file类似(并且与大多数NDB打算在管理服务器主机上运行或连接到管理服务器的其他实用程序不同),ndb_print_frag_file 必须在群集数据节点上运行,因为它访问数据节点文件系统直接。因为它没有使用管理服务器,所以当管理服务器没有运行时,甚至当群集已经完全关闭时,可以使用该实用程序。

其他选项

没有。

示例输出

外壳> ndb_print_frag_file /usr/local/mysqld/data/ndb_3_fs/D1/DBDIH/S2.FragList 
文件名:/usr/local/mysqld/data/ndb_3_fs/D1/DBDIH/S2.FragList,大小为8192
noOfPages = 1 noOfWords = 182
表数据
----------
Num Frags:2 NoOfReplicas:2 hashpointer:4294967040
kvalue:6掩码:0x00000000方法:HashMap
存储位于记录并检查点,可以存活SR
------ FragId的片段:0 --------
Preferred Primary:2 numStoredReplicas:2 numOldStoredReplicas:0 distKey:0 LogPartId:0
-------存储复制品----------
副本节点是:2 initialGci:2 numCrashedReplicas = 0 nextLcpNo = 1
LcpNo [0]:maxGciCompleted:1 maxGciStarted:2 lcpId:1 lcpStatus:有效
LcpNo [1]:maxGciCompleted:0 maxGciStarted:0 lcpId:0 lcpStatus:无效
-------存储复制品----------
副本节点是:3 initialGci:2 numCrashedReplicas = 0 nextLcpNo = 1
LcpNo [0]:maxGciCompleted:1 maxGciStarted:2 lcpId:1 lcpStatus:有效
LcpNo [1]:maxGciCompleted:0 maxGciStarted:0 lcpId:0 lcpStatus:无效
------ FragId的片段:1 --------
Preferred Primary:3 numStoredReplicas:2 numOldStoredReplicas:0 distKey:0 LogPartId:1
-------存储复制品----------
副本节点是:3 initialGci:2 numCrashedReplicas = 0 nextLcpNo = 1
LcpNo [0]:maxGciCompleted:1 maxGciStarted:2 lcpId:1 lcpStatus:有效
LcpNo [1]:maxGciCompleted:0 maxGciStarted:0 lcpId:0 lcpStatus:无效
-------存储复制品----------
副本节点是:2 initialGci:2 numCrashedReplicas = 0 nextLcpNo = 1
LcpNo [0]:maxGciCompleted:1 maxGciStarted:2 lcpId:1 lcpStatus:有效
LcpNo [1]:maxGciCompleted:0 maxGciStarted:0 lcpId:0 lcpStatus:无效

21.4.21  ndb_print_schema_file - 打印NDB架构文件内容

ndb_print_schema_file从集群模式文件获取诊断信息。

用法

ndb_print_schema_file file_name

file_name是集群模式文件的名称。有关集群模式文件的更多信息,请参阅NDB集群数据节点文件系统目录文件

ndb_print_backup_filendb_print_sys_file类似(并且与大多数NDB打算在管理服务器主机上运行或连接到管理服务器的其他实用程序不同),ndb_print_schema_file 必须在群集数据节点上运行,因为它直接访问数据节点文件系统。因为它没有使用管理服务器,所以当管理服务器没有运行时,甚至当群集已经完全关闭时,可以使用该实用程序。

其他选项

没有。

21.4.22  ndb_print_sys_file - 打印NDB系统文件内容

ndb_print_sys_file从NDB集群系统文件获取诊断信息。

用法

ndb_print_sys_file file_name

file_name是集群系统文件(sysfile)的名称。集群系统文件位于数据节点的数据目录(DataDir)中; 此目录下的系统文件路径与该模式匹配 在每种情况下,代表一个数字(不一定是相同的数字)。有关更多信息,请参阅NDB群集数据节点文件系统目录文件ndb_#_fs/D#/DBDIH/P#.sysfile#

ndb_print_backup_filendb_print_schema_file类似(并且与大多数NDB打算在管理服务器主机上运行或连接到管理服务器的其他实用程序不同),ndb_print_backup_file 必须在群集数据节点上运行,因为它直接访问数据节点文件系统。因为它没有使用管理服务器,所以当管理服务器没有运行时,甚至当群集已经完全关闭时,可以使用该实用程序。

其他选项

没有。

21.4.23  ndb_redo_log_reader - 检查并打印群集重做日志的内容

读取重做日志文件,检查错误,以可读格式打印其内容,或两者兼而有之。 ndb_redo_log_reader主要供NDB集群开发人员和支持人员用于调试和诊断问题。

此实用程序仍在开发中,其语法和行为在未来的NDB群集版本中可能会发生变化。

注意

在NDB 7.2之前,该实用程序被命名为 ndbd_redo_log_reader

ndb_redo_log_reader 的C ++源文件 可以在目录中找到 /storage/ndb/src/kernel/blocks/dblqh/redoLogReader

下表包含特定于NDB群集程序ndb_redo_log_reader的选项其他说明在表格后面。有关大多数NDB群集程序(包括 ndb_redo_log_reader)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.323 ndb_redo_log_reader程序的命令行选项

格式 描述 已添加,已弃用或已删除

-dump

打印转储信息

所有基于MySQL 5.7的版本

-filedescriptors

仅打印文件描述符

所有基于MySQL 5.7的版本

--help

打印使用信息

所有基于MySQL 5.7的版本

-lap

提供圈速信息,最大GCI启动并完成

所有基于MySQL 5.7的版本

-mbyte #

开始兆字节

所有基于MySQL 5.7的版本

-mbyteheaders

只显示文件中每兆字节的首页页眉

所有基于MySQL 5.7的版本

-nocheck

不要检查记录是否有错误

所有基于MySQL 5.7的版本

-noprint

不要打印记录

所有基于MySQL 5.7的版本

-page #

从此页开始

所有基于MySQL 5.7的版本

-pageheaders

仅显示页面标题

所有基于MySQL 5.7的版本

-pageindex #

从这个页面索引开始

所有基于MySQL 5.7的版本

-twiddle

位移转储

所有基于MySQL 5.7的版本


用法

ndb_redo_log_reader file_name[ options]

file_name是群集重做日志文件的名称。重做日志文件位于数据节点数据目录(DataDir下的编号目录中; 此目录下的重做日志文件路径与该模式匹配 是数据节点的节点ID。每个的两个实例代表一个数字(不一定是相同的数字); 以下数字在8-39范围内; 随后的号码范围根据 配置参数的值而不同 ,默认值为16; 因此,文件名中数字的默认范围是0-15(含)。有关更多信息,请参阅 ndb_nodeid_fs/D#/DBLQH/S#.FragLognodeid#DSNoOfFragmentLogFilesNDB群集数据节点文件系统目录文件

要读取的文件的名称后可以跟一个或多个此处列出的选项:

  • -dump

    属性
    命令行格式 -dump
    类型 布尔
    默认 FALSE

    打印转储信息。

  • 属性
    命令行格式 -filedescriptors
    类型 布尔
    默认 FALSE

    -filedescriptors:仅打印文件描述符。

  • 属性
    命令行格式 --help

    --help:打印使用情况信息。

  • -lap

    属性
    命令行格式 -lap
    类型 布尔
    默认 FALSE

    提供圈速信息,最大GCI启动并完成。

  • 属性
    命令行格式 -mbyte #
    类型 数字
    默认 0
    最低限度 0
    最大 15

    -mbyte #:开始兆字节。

    # 是0到15之间的整数,包括0和15。

  • 属性
    命令行格式 -mbyteheaders
    类型 布尔
    默认 FALSE

    -mbyteheaders:仅显示文件中每兆字节的首页页眉。

  • 属性
    命令行格式 -noprint
    类型 布尔
    默认 FALSE

    -noprint:不要打印日志文件的内容。

  • 属性
    命令行格式 -nocheck
    类型 布尔
    默认 FALSE

    -nocheck:不要检查日志文件的错误。

  • 属性
    命令行格式 -page #
    类型 整数
    默认 0
    最低限度 0
    最大 31

    -page #:从这个页面开始。

    # 是一个范围在0到31之间的整数。

  • 属性
    命令行格式 -pageheaders
    类型 布尔
    默认 FALSE

    -pageheaders:仅显示页面标题。

  • 属性
    命令行格式 -pageindex #
    类型 整数
    默认 12
    最低限度 12
    最大 8191

    -pageindex #:从本页索引开始。

    # 是12和8191之间的整数,包括12和8191。

  • -twiddle

    属性
    命令行格式 -twiddle
    类型 布尔
    默认 FALSE

    位移转储。

ndb_print_backup_filendb_print_schema_file类似(并且与NDB旨在在管理服务器主机上运行或连接到管理服务器的大多数实用程序不同 ),ndb_redo_log_reader必须在群集数据节点上运行,因为它直接访问数据节点文件系统。因为它没有使用管理服务器,所以当管理服务器没有运行时,甚至当群集已经完全关闭时,可以使用该实用程序。

21.4.24  ndb_restore - 恢复NDB群集备份

群集恢复程序是作为单独的命令行实用程序ndb_restore实现的,通常可以在MySQL bin 目录中找到它该程序读取作为备份结果创建的文件,并将存储的信息插入数据库。

ndb_restore必须一次为每个被创建的备份文件的执行 START BACKUP用于创建备份命令(见 第21.5.3.2,“使用NDB群集管理客户端创建备份”)。这与创建备份时群集中的数据节点数量相同。

注意

在使用ndb_restore之前,建议群集以单用户模式运行,除非您并行还原多个数据节点。有关更多信息请参见 第21.5.8节“NDB群集单用户模式”

下表包含特定于NDB集群本机备份还原程序 ndb_restore的选项其他说明在表格后面。有关大多数NDB群集程序(包括ndb_restore常见的选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.324 ndb_restore程序的命令行选项

格式 描述 已添加,已弃用或已删除

--append

将数据附加到制表符分隔的文件

所有基于MySQL 5.7的版本

--backup_path=dir_name

备份文件目录的路径

所有基于MySQL 5.7的版本

--backupid=#

-b

从具有给定ID的备份中恢复

所有基于MySQL 5.7的版本

--connect

-c

--connectstring的别名。

所有基于MySQL 5.7的版本

--disable-indexes

导致备份中的索引被忽略; 可能会减少恢复数据所需的时间。

所有基于MySQL 5.7的版本

--dont_ignore_systab_0

-f

在还原期间不要忽略系统表。只有实验; 不用于生产使用

所有基于MySQL 5.7的版本

--exclude-databases=db-list

要排除的一个或多个数据库的列表(包括未命名的数据库)

所有基于MySQL 5.7的版本

--exclude-intermediate-sql-tables[=TRUE|FALSE]

如果为TRUE(默认值),则不要恢复任何复制ALTER TABLE操作时留下的中间表(名称前缀为“#sql-”)。

所有基于MySQL 5.7的版本

--exclude-missing-columns

导致从数据库中表的版本中缺少的表的备份版本中的列被忽略。

所有基于MySQL 5.7的版本

--exclude-missing-tables

导致从数据库中丢失的备份中的表被忽略。

所有基于MySQL 5.7的版本

--exclude-tables=table-list

要排除的一个或多个表的列表(包括未命名的同一数据库中的那些表); 每个表引用都必须包含数据库名称

所有基于MySQL 5.7的版本

--fields-enclosed-by=char

字段用指示的字符括起来

所有基于MySQL 5.7的版本

--fields-optionally-enclosed-by

字段可以用指定的字符随意包围

所有基于MySQL 5.7的版本

--fields-terminated-by=char

字段由指示的字符终止

所有基于MySQL 5.7的版本

--hex

以十六进制格式打印二进制类型

所有基于MySQL 5.7的版本

--include-databases=db-list

要还原的一个或多个数据库的列表(不包括未命名的数据库)

所有基于MySQL 5.7的版本

--include-tables=table-list

要还原的一个或多个表的列表(不包括未命名的同一数据库中的那些表); 每个表引用都必须包含数据库名称

所有基于MySQL 5.7的版本

--lines-terminated-by=char

行被指定的字符终止

所有基于MySQL 5.7的版本

--lossy-conversions

-L

从备份恢复数据时允许列值的有损转换(类型降级或符号更改)

所有基于MySQL 5.7的版本

--no-binlog

如果连接了mysqld并使用二进制日志记录,则不要记录还原的数据

所有基于MySQL 5.7的版本

--no-restore-disk-objects

-d

不要恢复与磁盘数据相关的对象

所有基于MySQL 5.7的版本

--no-upgrade

-u

不要为尚未调整VAR数据大小的varsize属性升级数组类型,也不要更改列属性

所有基于MySQL 5.7的版本

--ndb-nodegroup-map=map

-z

NDBCLUSTER存储引擎的节点组映射。语法:列表(source_nodegroup,destination_nodegroup)

所有基于MySQL 5.7的版本

--nodeid=#

-n

备份所在节点的ID

所有基于MySQL 5.7的版本

--parallelism=#

-p

恢复数据时使用的并行事务数

所有基于MySQL 5.7的版本

--preserve-trailing-spaces

-P

在将固定宽度字符串类型提升为可变宽度类型时,允许保留尾部空格(包括填充)

所有基于MySQL 5.7的版本

--print

打印元数据,数据和日志到标准输出(相当于--print_meta --print_data --print_log)

所有基于MySQL 5.7的版本

--print_data

将数据打印到标准输出

所有基于MySQL 5.7的版本

--print_log

打印到标准输出

所有基于MySQL 5.7的版本

--print_meta

打印元数据到标准输出

所有基于MySQL 5.7的版本

print-sql-log

将SQL日志写入stdout; 默认值为FALSE

ADDED:NDB 7.5.4

--progress-frequency=#

打印每个给定秒数的恢复状态

所有基于MySQL 5.7的版本

--promote-attributes

-A

从备份还原数据时允许提升属性

所有基于MySQL 5.7的版本

--rebuild-indexes

导致在备份中找到的有序索引的多线程重新构建。使用的线程数量通过设置BuildIndexThreads参数来确定。

所有基于MySQL 5.7的版本

--restore_data

-r

使用NDB API将表数据和日志恢复到NDB群集中

所有基于MySQL 5.7的版本

--restore_epoch

-e

将时代信息恢复到状态表中。方便在MySQL Cluster复制从属设备上启动复制。将更新/插入id为0的mysql.ndb_apply_status中的行。

所有基于MySQL 5.7的版本

--restore_meta

-m

使用NDB API将元数据还原到NDB群集

所有基于MySQL 5.7的版本

--restore-privilege-tables

恢复先前移动到NDB的MySQL权限表。

所有基于MySQL 5.7的版本

--rewrite-database=olddb,newdb

使用与原始名称不同的名称恢复到数据库

所有基于MySQL 5.7的版本

--skip-broken-objects

导致备份文件中丢失的Blob表被忽略。

所有基于MySQL 5.7的版本

--skip-table-check

-s

恢复数据时跳过表格结构检查

所有基于MySQL 5.7的版本

--skip-unknown-objects

导致在将从较新的MySQL Cluster版本创建的备份还原到较旧版本时,ndb_restore无法识别的模式对象将被忽略。

所有基于MySQL 5.7的版本

--tab=dir_name

-T dir_name

为给定路径中的每个表创建一个制表符分隔的.txt文件

所有基于MySQL 5.7的版本

--verbose=#

输出的详细程度

所有基于MySQL 5.7的版本


此实用程序的典型选项如下所示:

ndb_restore [-c connection_string] -n node_id-b backup_id\
      [-m] -r --backup_path =/path/to/backup/files

通常,从NDB群集备份恢复时, ndb_restore至少需要 --nodeid(简写: -n), --backupid(简写 :)-b--backup_path选项。另外,当使用ndb_restore恢复任何包含唯一索引的表时,您必须包含 --disable-indexes--rebuild-indexes(错误#57782,错误#11764893)

-c选项用于指定一个连接字符串,它告诉ndb_restore集群管理服务器的位置(请参见 第21.3.3.3节“NDB集群连接字符串”)。如果未使用此选项,则ndb_restore会尝试连接到管理服务器 localhost:1186此实用程序充当群集API节点,因此需要一个空闲连接 插槽才能连接到群集管理服务器。这意味着集群文件中至少必须有一个[api]一个 [mysqld]部分可以使用它 config.ini至少保留一个空的是个好主意[api][mysqld]部分中使用 config.ini由于这个原因,它并未用于MySQL服务器或其他应用程序(请参见 第21.3.3.7节“在NDB集群中定义SQL和其他API节点”)。

您可以使用ndb_mgm中SHOW命令来验证ndb_restore已连接到群集管理客户端中您也可以从系统shell中完成此操作,如下所示:

外壳> ndb_mgm -e "SHOW"

有关ndb_restore使用的所有选项的更多详细信息,请参见以下列表:

  • --append

    属性
    命令行格式 --append

    --tab and --print_data 选项一起使用时,会导致数据被附加到具有相同名称的任何现有文件。

  • --backup_path=dir_name

    属性
    命令行格式 --backup-path=dir_name
    类型 目录名称
    默认 ./

    备份目录的路径是必需的; 它将使用该 --backup_path选项提供给ndb_restore,并且必须包含要恢复的备份的ID备份对应的子目录。例如,如果数据节点 DataDir/var/lib/mysql-cluster,则备份目录是 /var/lib/mysql-cluster/BACKUP,并且可以在中找到ID为3的备份的备份文件 /var/lib/mysql-cluster/BACKUP/BACKUP-3该路径可以是绝对的或相对于ndb_restore可执行文件所在的目录,并且可以有选择地加上前缀 backup_path=

    可以使用与创建的配置不同的配置将备份还原到数据库。例如,假设与备份ID备份 12,在集群中具有节点ID两个存储节点创建23,要恢复到群集具有四个节点。然后,必须为运行备份的群集中的每个存储节点运行两次ndb_restore一次。但是, ndb_restore不能将从运行一个版本的MySQL的群集备份到运行不同MySQL版本的群集。看到 有关更多信息,请参见第21.2.8节“升级和降级NDB集群”

    重要

    使用旧版本的ndb_restore不可能恢复从较新版本的NDB群集中创建的 备份您可以将从较新版本的MySQL制作的备份恢复到较旧的群集,但您必须使用 新NDB群集版本ndb_restore副本来执行此操作。

    例如,要将从运行NDB集群7.5.11的集群获取的集群备份还原到运行NDB集群7.4.21的集群,必须使用NDB集群7.5.11分发版附带ndb_restore

    要获得更快速的恢复,只要有足够数量的可用群集连接,就可以并行恢复数据。也就是说,当并行恢复到多个节点时, 群集文件中必须有一个[api]一个 [mysqld]节段config.ini可用于每个并行ndb_restore 进程。但是,数据文件必须始终在日志之前应用。

  • --backupid= #-b

    属性
    命令行格式 --backupid=#
    类型 数字
    默认 none

    该选项用于指定备份的ID或序列号,与备份 完成时显示消息中管理客户端显示的号码相同(请参见 第21.5.3.2节“使用NDB群集管理客户端创建备份”。) Backup backup_id completed

    重要

    在还原集群备份时,必须确保从具有相同备份标识的备份中还原所有数据节点。使用来自不同备份的文件最多会导致将群集恢复到不一致状态,并可能完全失败。

  • --connect-c

    属性
    命令行格式 --connect
    类型
    默认 localhost:1186

    别名 --ndb-connectstring

  • --disable-indexes

    属性
    命令行格式 --disable-indexes

    在从本机NDB备份恢复数据期间禁用索引恢复之后,您可以使用多线程构建索引来一次性还原所有表的索引 --rebuild-indexes,这应该比针对非常大的表同时重建索引更快。

  • --dont_ignore_systab_0-f

    属性
    命令行格式 --dont-ignore-systab-0

    通常,恢复表数据和元数据时, ndb_restore将忽略NDB备份中存在系统表副本 --dont_ignore_systab_0导致系统表被恢复。此选项仅用于实验和开发,不建议在生产环境中使用

  • --exclude-databases=db-list

    属性
    命令行格式 --exclude-databases=db-list
    类型
    默认

    逗号分隔的一个或多个不应该被恢复的数据库列表。

    这个选项通常与...结合使用 --exclude-tables; 请参阅该选项的说明以获取更多信息和示例。

  • --exclude-intermediate-sql-tables[=TRUE|FALSE]

    属性
    命令行格式 --exclude-intermediate-sql-tables[=TRUE|FALSE]
    类型 布尔
    默认 TRUE

    执行复制ALTER TABLE操作时,mysqld 创建中间表(其名称前缀为 #sql-)。何时TRUE,该 --exclude-intermediate-sql-tables选项使ndb_restore不会恢复这些可能从这些操作中遗留下来的表。这个选项是TRUE默认的。

  • --exclude-missing-columns

    属性
    命令行格式 --exclude-missing-columns

    可以使用此选项仅恢复选定的表列,这会导致ndb_restore忽略与正在恢复的表中缺少的列相比,备份中找到的那些表的版本。该选项适用于所有正在恢复的表。如果您希望此选项仅适用于选定的表或数据库,您可以结合使用它与一个或多个的--include-*--exclude-*在本节其他地方所描述的选项的话,那么数据使用一组互补的这些恢复的其他表格选项。

  • --exclude-missing-tables

    属性
    命令行格式 --exclude-missing-tables

    可以使用此选项仅恢复选定的表,这会导致ndb_restore忽略备份中未在目标数据库中找到的任何表。

  • --exclude-tables=table-list

    属性
    命令行格式 --exclude-tables=table-list
    类型
    默认

    要排除的一个或多个表的列表; 每个表引用都必须包含数据库名称。经常与它一起使用 --exclude-databases

    --exclude-databases或者 --exclude-tables使用时,只有那些由选项命名的数据库或表被排除; 所有其他数据库和表都由ndb_restore恢复

    此表显示了多个对ndb_restore usng --exclude-*选项的调用 (为了清楚起见,可能需要其他选项已被省略)以及这些选项对从NDB群集备份还原的影响:

    表21.325使用--exclude- *选项对ndb_restore进行了几次调用,以及这些选项对从NDB群集备份还原的效果。

    选项 结果
    --exclude-databases=db1 所有数据库中的所有表除外db1被恢复; 没有表格db1被恢复
    --exclude-databases=db1,db2(或 --exclude-databases=db1 --exclude-databases=db2 所有数据库中的所有表除外db1db2已恢复; 没有表 db1db2恢复
    --exclude-tables=db1.t1 t1数据库 以外的所有表db1都已恢复; 所有其他表格db1都被恢复; 所有其他数据库中的所有表都被恢复
    --exclude-tables=db1.t2,db2.t1 (要么 --exclude-tables=db1.t2 --exclude-tables=db2.t1) 数据库中db1表格以外的t2所有表格以及数据库中db2表格外的 所有表格 t1均被还原; 在没有其他表 db1db2恢复; 所有其他数据库中的所有表都被恢复

    你可以一起使用这两个选项。例如,由以下原因引起所有数据库中的所有表 除了数据库 db1db2,和表t1t2数据库db3,要恢复:

    外壳> ndb_restore [...] --exclude-databases=db1,db2 --exclude-tables=db3.t1,db3.t2
    

    (再一次,为了清晰和简洁,我们已经省略了其他可能的必要选项,从刚才所示的例子)。

    您可以一起使用--include-*--exclude-*选项,但需遵守以下规则:

    • 所有--include-*--exclude-*选项的操作都是累积的。

    • 所有选项--include-*--exclude-*选项都按照从右到左传递给ndb_restore的顺序进行评估。

    • 在选项冲突的情况下,第一个(最右边的)选项优先。换句话说,与给定数据库或表匹配的第一个选项(从右到左)胜出

    例如,下面的组选项使 ndb_restore恢复从数据库中所有表db1除外 db1.t1,同时恢复从任何其他数据库中没有其他表:

            
    --include-databases = db1 --exclude-tables = db1.t1
    

    但是,仅仅给出的选项顺序颠倒只会导致数据库中的所有表 db1被还原(包括 db1.t1但不包含任何其他数据库中的表),因为--include-databases 最右边选项是针对数据库的第一个匹配项db1,因此需要优先于任何匹配的其他选项 db1或以下任何表格 db1

            
    --exclude-tables = db1.t1 --include-databases = db1
    
  • --fields-enclosed-by=char

    属性
    命令行格式 --fields-enclosed-by=char
    类型
    默认

    每个列值由传递给此选项的字符串包围(不管数据类型如何;请参阅说明 --fields-optionally-enclosed-by)。

  • --fields-optionally-enclosed-by

    属性
    命令行格式 --fields-optionally-enclosed-by
    类型
    默认

    传递给该选项的字符串用于发布包含字符数据列的值(如 CHARVARCHARBINARYTEXT,或 ENUM)。

  • --fields-terminated-by=char

    属性
    命令行格式 --fields-terminated-by=char
    类型
    默认 \t (tab)

    传递给此选项的字符串用于分隔列值。默认值是一个制表符(\t)。

  • --hex

    属性
    命令行格式 --hex

    如果使用此选项,则所有二进制值均以十六进制格式输出。

  • --include-databases=db-list

    属性
    命令行格式 --include-databases=db-list
    类型
    默认

    以逗号分隔的一个或多个要恢复的数据库列表。常与...一起使用 --include-tables; 有关更多信息和示例,请参阅该选项的说明。

  • --include-tables=table-list

    属性
    命令行格式 --include-tables=table-list
    类型
    默认

    逗号分隔的表格要恢复; 每个表引用都必须包含数据库名称。

    在使用--include-databases--include-tables使用时,只会恢复选项指定的那些数据库或表; 所有其他数据库和表都被ndb_restore排除 ,并且不会被恢复。

    下表显示了ndb_restore使用 --include-*选项的多个调用 (为清楚起见,可能需要省略其他选项)以及这些选项对从NDB群集备份还原的影响:

    表21.326使用--include- *选项对ndb_restore的几次调用,以及它们对从NDB群集备份还原的影响。

    选项 结果
    --include-databases=db1 只有数据库db1中的被恢复; 所有其他数据库中的所有表都被忽略
    --include-databases=db1,db2(或 --include-databases=db1 --include-databases=db2 在数据库中仅有的表db1db2恢复; 所有其他数据库中的所有表都被忽略
    --include-tables=db1.t1 只有t1数据库中的db1被恢复; db1任何其他数据库或其他数据库中都不会还原其他表
    --include-tables=db1.t2,db2.t1(或 --include-tables=db1.t2 --include-tables=db2.t1 只有t2数据库中db1 的表t1和数据库 db2的表被恢复; 在没有其它表db1db2或任何其它数据库被恢复

    您也可以一起使用这两个选项。例如,以下内容会导致数据库中的所有表db1以及db2t1t2数据库中的所有表都 db3被还原(并且没有其他数据库或表):

    外壳> ndb_restore [...] --include-databases=db1,db2 --include-tables=db3.t1,db3.t2
    

    (我们再次省略了刚刚显示的示例中的其他可能需要的选项。)

    还可以使用以下所示的语法,仅恢复选定的数据库或从单个数据库中选择的表,而不使用任何 --include-*(或 --exclude-*)选项:

    ndb_restore ,[ [,...] | [,] [,...]]
    other_options db_namedb_nametbl_nametbl_name

    换句话说,您可以指定要恢复的以下任一项:

    • 来自一个或多个数据库的所有表格

    • 来自单个数据库的一个或多个表

  • --lines-terminated-by=char

    属性
    命令行格式 --lines-terminated-by=char
    类型
    默认 \n (linebreak)

    指定用于结束每行输出的字符串。缺省值是一个换行字符(\n)。

  • --lossy-conversions-L

    属性
    命令行格式 --lossy-conversions
    类型 布尔
    默认 FALSE (如果不使用选项)

    该选项旨在补充 --promote-attributes 选项。--lossy-conversions在从备份恢复数据时,使用允许列值的有损转换(类型降级或符号更改)。除了一些例外,降级规则与MySQL复制相同; 有关属性降级当前支持的特定类型转换的信息请参见 第16.4.1.10.2节“具有不同数据类型的列的复制”

    ndb_restore报告每个属性和列在有损转换期间执行的任何数据截断。

  • --no-binlog

    属性
    命令行格式 --no-binlog

    此选项可防止任何连接的SQL节点将由ndb_restore还原的数据写入其二进制日志。

  • --no-restore-disk-objects-d

    属性
    命令行格式 --no-restore-disk-objects
    类型 布尔
    默认 FALSE

    此选项可防止ndb_restore恢复任何NDB群集磁盘数据对象,如表空间和日志文件组; 有关这些的更多信息请参见 第21.5.13节“NDB群集磁盘数据表”

  • --no-upgrade-u

    属性
    命令行格式 --no-upgrade

    当使用ndb_restore恢复备份时,VARCHAR使用旧固定格式创建的列将被调整大小,并使用现在使用的可变宽度格式重新创建。这种行为可以通过指定来覆盖 --no-upgrade

  • --ndb-nodegroup-map= map-z

    属性
    命令行格式 --ndb-nodegroup-map=map

    该选项可用于恢复从一个节点组到另一个节点组的备份。它的论点是表格的列表 source_node_group, target_node_group

  • --nodeid= #-n

    属性
    命令行格式 --nodeid=#
    类型 数字
    默认 none

    指定进行备份的数据节点的节点标识。

    当从具有不同数量的数据节点的群集恢复备份时,此信息有助于识别要恢复给定节点的正确的一组或多组文件。(在这种情况下,通常需要将多个文件恢复到单个数据节点。)有关其他信息和示例,请参见 第21.4.24.1节“恢复到不同数量的数据节点”

  • --parallelism= #-p

    属性
    命令行格式 --parallelism=#
    类型 数字
    默认 128
    最低限度 1
    最大 1024

    ndb_restore使用单行事务同时应用多行。此参数确定 ndb_restore实例尝试使用的并行事务(并发行)的数量默认情况下,这是128; 最小值为1,最大值为1024。

    执行插入的工作在涉及的数据节点中的线程之间并行化。该机制用于恢复.Data文件中的批量数据 - 即数据的模糊快照; 它不用于建立或重建索引。更改日志是连续应用的; 索引下降和构建是DDL操作并分开处理。在还原的客户端没有线程级并行性。

  • --preserve-trailing-spaces-P

    属性
    命令行格式 --preserve-trailing-spaces

    在将固定宽度字符数据类型提升为其可变宽度等效项时(即将CHAR列值提升为 VARCHAR或将 BINARY列值 提升为)时,会导致保留尾随空格 VARBINARY否则,当这些列值插入新列时,任何尾随空格将从这些列值中删除。

    注意

    尽管您可以将 CHARVARCHARBINARY列升级为 VARBINARY,但无法将VARCHARCHARVARBINARY列升级为 BINARY

  • --print

    属性
    命令行格式 --print
    类型 布尔
    默认 FALSE

    导致ndb_restore打印所有数据,元数据和日志stdout相当于用 --print_data--print_meta--print_log选择在一起。

    注意

    使用--print或任何 --print_*选项实际上是执行空运行。包括一个或多个这些选项会导致任何输出重定向到stdout; 在这种情况下,ndb_restore不会尝试将数据或元数据还原到NDB群集。

  • --print_data

    属性
    命令行格式 --print-data
    类型 布尔
    默认 FALSE

    导致ndb_restore将其输出指向 stdout常与一个或多个一起使用--tab--fields-enclosed-by--fields-optionally-enclosed-by--fields-terminated-by--hex,和 --append

    TEXT并且 BLOB列值始终被截断。这些值被截断为输出中的前256个字节。这在使用时目前不能被覆盖--print_data

  • --print_log

    属性
    命令行格式 --print-log
    类型 布尔
    默认 FALSE

    导致ndb_restore输出其日志 stdout

  • --print_meta

    属性
    命令行格式 --print-meta
    类型 布尔
    默认 FALSE

    打印所有的元数据stdout

  • print-sql-log

    属性
    命令行格式 print-sql-log
    介绍 16年7月5日 - NDB-7.5.4
    类型 布尔
    默认 FALSE

    将SQL语句记录到stdout使用该选项启用; 通常这种行为被禁用。该选项在尝试记录所有正在恢复的表是否明确定义了主键之前进行检查; 只有实现了隐藏主键的表上的查询NDB无法转换为有效的SQL。

    --print-sql-log 选项已添加到NDB 7.5.4中。(Bug#13511949)

  • --progress-frequency=N

    属性
    命令行格式 --progress-frequency=#
    类型 数字
    默认 0
    最低限度 0
    最大 65535

    N 在备份过程中每秒 打印一份状态报告0(默认)不会打印状态报告。最大值是65535。

  • --promote-attributes-A

    属性
    命令行格式 --promote-attributes

    ndb_restore支持有限的 属性提升,其方式与MySQL复制支持的方式大致相同; 也就是说,从给定类型的列中备份的数据通常可以使用更大,相似 ”的类型恢复到列例如,从数据 CHAR(20)列可以被恢复到声明为一列VARCHAR(20)VARCHAR(30)CHAR(30); 来自MEDIUMINT列的数据 可以恢复到类型INT列的列 BIGINT请参见 第16.4.1.10.2节“具有不同数据类型的列的复制”,目前支持属性提升的类型转换表。

    必须明确启用ndb_restore的 属性升级,如下所示:

    1. 准备要将备份恢复到的表。 ndb_restore不能用于重新创建与原始表的定义不同的表; 这意味着您必须手动创建表,或ALTER TABLE 在恢复表元数据之后但在还原数据之前更改您希望使用的列

    2. 在还原表格数据时使用 选项(缩写形式 调用ndb_restore如果不使用此选项,则不会发生属性提升; 相反,恢复操作失败并出现错误。 --promote-attributes-A

    在字符数据类型和 TEXTBLOB之间进行转换时,只能同时执行字符类型(CHARVARCHAR)和二进制类型(BINARYVARBINARY之间的转换例如,您不能将 INTBIGINT提升VARCHARTEXTndb_restore的相同调用中提升 时间

    TEXT 不支持使用不同字符集之间转换,并且明确禁止。

    当执行字符或二进制类型转换到 TEXTBLOBndb_restore,您可能会注意到它创建并使用一个或多个名为临时表 之后这些表格不再需要,并且在恢复成功后通常由ndb_restore删除table_name$STnode_id

  • --rebuild-indexes

    属性
    命令行格式 --rebuild-indexes

    在恢复本机NDB备份的同时启用有序索引的多线程重建用于通过此选项ndb_restore构建有序索引的线程数 BuildIndexThreads 数据节点配置参数和LDM数控制。

    仅在第一次运行ndb_restore时才需要使用此选项 ; 这会导致--rebuild-indexes在恢复后续节点时重新构建所有有序索引而不再使用它们 在将新行插入数据库之前,您应该使用此选项; 否则,在尝试重建索引时,可能会插入一个稍后导致唯一约束违反的行。

    有序索引的构建默认与LDM的数量并行。使用BuildIndexThreads 数据节点配置参数可以加快在节点和系统重新启动期间执行的离线索引构建 ; 此参数对通过在线执行的ndb_restore删除和重建索引没有影响

    重建唯一索引使用磁盘写入带宽进行重做日志记录和本地检查点设置。此bandband数量不足可能会导致重做缓冲区过载或日志过载错误。在这种情况下,您可以再次运行 ndb_restore --rebuild-indexes ; 该过程将在发生错误的位置恢复。遇到临时错误时,您也可以执行此操作。您可以无限地重复执行ndb_restore --rebuild-indexes ; 您可以通过减少值来阻止此类错误 --parallelism如果问题是空间不足,可以增加重做日志的大小(FragmentLogFileSize 节点配置参数),或者可以提高执行LCP的速度(MaxDiskWriteSpeed 以及相关参数),以便更快地释放空间。

  • --restore_data-r

    属性
    命令行格式 --restore-data
    类型 布尔
    默认 FALSE

    输出NDB表格数据和日志。

  • --restore_epoch-e

    属性
    命令行格式 --restore-epoch

    将时期信息添加(或恢复)到集群复制状态表。这对于在NDB群集复制从服务器上启动复制很有用。当使用这个选项,在该行 mysql.ndb_apply_status0id如果它已经存在列被更新; 如果它不存在,则插入这样的行。(请参见 第21.6.9节“使用NDB群集复制的NDB群集备份”。)

  • --restore_meta-m

    属性
    命令行格式 --restore-meta
    类型 布尔
    默认 FALSE

    该选项会导致ndb_restore打印 NDB表格元数据。

    第一次运行ndb_restore 恢复程序时,还需要恢复元数据。换句话说,您必须重新创建数据库表 - 这可以通过使用--restore_meta-m)选项运行来完成 恢复元数据只需要在单个数据节点上完成; 这足以将其恢复到整个群集。

    在早期版本的NDB集群中,使用此选项恢复模式的表使用与原始集群相同数量的分区,即使它与新集群有不同数量的数据节点。在NDB 7.5.2及更高版本中,恢复元数据时,这不再是问题; ndb_restore现在使用目标群集的默认分区数量,除非本地数据管理器线程的数量也从原始群集中数据节点的数量更改。

    注意

    开始还原备份时,群集应该有一个空数据库。(换句话说,您应该--initial 在执行还原之前启动数据节点。)

  • --restore-privilege-tables

    属性
    命令行格式 --restore-privilege-tables
    类型 布尔
    默认 FALSE (如果不使用选项)

    ndb_restore默认不会恢复分布式MySQL特权表。该选项会导致 ndb_restore还原特权表。

    这仅在特权表转换为 NDB备份前才有效。有关更多信息,请参见 第21.5.15节“NDB群集的分布式MySQL权限”

  • --rewrite-database=olddb,newdb

    属性
    命令行格式 --rewrite-database=olddb,newdb
    类型
    默认 none

    使用此选项可以还原到备份中使用的名称不同的数据库。例如,如果备份是由名为数据库的数据库构成的 products,则可以将其包含的数据还原到名为的数据库inventory,如下所示使用此选项(省略可能需要的任何其他选项):

    shell> ndb_restore --rewrite-database =产品,库存
    

    该选项可以在ndb_restore的单个调用中多次使用因此可以同时从名为db1数据库的数据库 db2db3名为db4 using 的数据库恢复数据 --rewrite-database=db1,db2 --rewrite-database=db3,db4其他 ndb_restore选项可用于多次出现之间--rewrite-database

    在多个--rewrite-database选项之间发生冲突时 ,使用最后一个 --rewrite-database选项(从左到右读取)是生效的选项。例如,如果--rewrite-database=db1,db2 --rewrite-database=db1,db3使用,只有 --rewrite-database=db1,db3被尊重,并被 --rewrite-database=db1,db2忽略。也可以从多个数据库到一个单一的数据库恢复,所以--rewrite-database=db1,db3 --rewrite-database=db2,db3从数据库中恢复所有表和数据db1,并 db2进入数据库db3

    重要

    当使用多个备份数据库恢复到单个目标数据库时 --rewrite-database,不检查表或其他对象名称之间的冲突,也不保证行恢复的顺序。这意味着在这种情况下可能会覆盖行并更新丢失。

  • --skip-broken-objects

    属性
    命令行格式 --skip-broken-objects

    此选项会导致ndb_restore在读取本地NDB备份时忽略损坏的表 ,并继续恢复所有剩余的表(也不会损坏)。目前,该 --skip-broken-objects选项仅适用于缺少斑点零件表的情况。

  • --skip-table-check-s

    属性
    命令行格式 --skip-table-check

    可以在不恢复表元数据的情况下恢复数据。默认情况下,如果在表数据和表模式之间发现不匹配ndb_restore将失败并返回错误; 此选项将覆盖该行为。

    放宽 使用ndb_restore恢复数据时列定义中不匹配的一些限制; 当遇到这些类型的不匹配时,ndb_restore不会像以前那样以错误停止,而是接受数据并将其插入到目标表中,同时向用户发出警告,告知用户正在执行此操作。无论是否有任何选项--skip-table-check--promote-attributes正在使用,都会发生此问题 列定义中的这些差异具有以下类型:

    • 不同的COLUMN_FORMAT设置(FIXEDDYNAMICDEFAULT

    • 不同的STORAGE设置(MEMORYDISK

    • 不同的默认值

    • 不同的分配键设置

  • --skip-unknown-objects

    属性
    命令行格式 --skip-unknown-objects

    此选项会导致ndb_restore在读取本机NDB备份时忽略它不识别的任何模式对象这可用于将从运行(例如)NDB 7.6的群集创建的备份还原到运行NDB群集7.5的群集。

  • --tab= dir_name-T dir_name

    属性
    命令行格式 --tab=dir_name
    类型 目录名称

    导致--print_data创建转储文件,每个表都有一个命名 tbl_name.txt它需要作为参数来保存文件的路径; 使用.当前目录。

  • --verbose=#

    属性
    命令行格式 --verbose=#
    类型 数字
    默认 1
    最低限度 0
    最大 255

    设置输出的详细程度。最小值为0; 最大值是255.默认值是1。

错误报告。  ndb_restore报告临时和永久错误。在出现临时错误的情况下,它可能会从中恢复,并Restore successful, but encountered temporary error, please look at configuration在这种情况下进行报告

重要

使用ndb_restore初始化NDB集群以用于循环复制后,将不会自动创建充当复制从节点的SQL节点上的二进制日志,并且必须使它们手动创建。要创建二进制日志,请SHOW TABLES在运行之前在该SQL节点上发出 语句START SLAVE这是NDB群集中的一个已知问题。

21.4.24.1恢复到不同数量的数据节点

可以从NDB备份恢复到数据节点数量不同于从中进行备份的原始数据节点。以下两节分别讨论目标集群的数据节点数量少于备份源数据节点的情况。

21.4.24.1.1恢复到比原始更少的节点

只要较大数量的节点是较小数量的偶数倍,您就可以恢复到数据节点少于原始数据节点的群集。在以下示例中,我们使用在具有四个数据节点的群集上进行的备份到具有两个数据节点的群集。

  1. 原始群集的管理服务器位于主机上host10原始群集有四个数据节点,其中节点标识和主机名显示在管理服务器config.ini文件的以下摘录中

    [ndbd]
     NodeId= 2
     HostName= host2
    
    [NDBD]
    的NodeId = 4
    HOSTNAME =主机4
    
    [NDBD]
    的NodeId = 6
    HOSTNAME =主机6
    
    [NDBD]
    的NodeId = 8
    主机名= host8
    

    我们假设每个数据节点最初都是以ndbmtd --ndb-connectstring=host10 或等价的方式启动的。

  2. 以正常方式执行备份。有关如何执行此操作的信息请参见 第21.5.3.2节“使用NDB群集管理客户端创建备份”

  3. 这里列出了每个数据节点上由备份创建的文件,其中N是节点标识并且B是备份标识。

    • BACKUP-B-0.N.Data

    • BACKUP-B.N.ctl

    • BACKUP-B.N.log

    这些文件 位于每个数据节点下。对于本例的其余部分,我们假设备份ID是1。 BackupDataDir/BACKUP/BACKUP-B

    让所有这些文件可用于以后复制到新数据节点(可通过ndb_restore在数据节点的本地文件系统上访问它们 )。将它们全部复制到一个位置是最简单的; 我们认为这是你所做的。

  4. 目标群集的管理服务器位于主机上 host20,目标有两个数据节点,其中显示节点ID和主机名,位于管理服务器config.ini文件上host20

    [NDBD]
    的NodeId = 3
    主机名= host3上
    
    [NDBD]
    的NodeId = 5
    主机名=主机5
    

    每个数据节点过程对 host3host5 应与启动ndbmtd -c host20 --initial或等同物,以便新的(目标)簇用干净的数据节点的文件系统启动。

  5. 将两组不同的两个备份文件复制到每个目标数据节点。在本例中,将来自节点2和节点6的备份文件从原始集群复制到目标集群中的节点3。这些文件在这里列出:

    • BACKUP-1-0.2.Data

    • BACKUP-1.2.ctl

    • BACKUP-1.2.log

    • BACKUP-1-0.6.Data

    • BACKUP-1.6.ctl

    • BACKUP-1.6.log

    然后将备份文件从节点4和8复制到节点5; 这些文件显示在以下列表中:

    • BACKUP-1-0.4.Data

    • BACKUP-1.4.ctl

    • BACKUP-1.4.log

    • BACKUP-1-0.8.Data

    • BACKUP-1.8.ctl

    • BACKUP-1.8.log

    对于本例的其余部分,我们假设相应的备份文件已保存到/BACKUP-1节点3和节点5上的目录中

  6. 在两个目标数据节点的每一个上,都必须从两组备份中进行还原。首先,通过调用ndb_restore on 将这些备份从节点2和节点6恢复到节点3, host3如下所示:

    外壳> ndb_restore -c host20 --nodeid=2 --backupid=1 --restore_data --backup_path=/BACKUP-1
    
    外壳> ndb_restore -c host20 --nodeid=4 --backupid=1 --restore_data --backup_path=/BACKUP-1
    

    然后通过调用恢复从节点4和8至节点5的备份ndb_restorehost5,如下所示:

    外壳> ndb_restore -c host20 --nodeid=6 --backupid=1 --restore_data --backup_path=/BACKUP-1
    
    外壳> ndb_restore -c host20 --nodeid=8 --backupid=1 --restore_data --backup_path=/BACKUP-1
    
21.4.24.1.2恢复到比原始更多的节点

为给定的ndb_restore命令指定的节点标识是原始备份中的节点标识,而不是数据节点要恢复到的节点标识 使用本节中介绍的方法执行备份时,ndb_restore 将连接到管理服务器,并获取备份要还原到的群集中的数据节点列表。恢复的数据会相应地分配,以便在执行备份时不需要知道或计算目标群集中节点的数量。

注意

更改每个节点组的LCP线程或LQH线程的总数时,应该使用mysqldump创建的备份重新创建模式

  1. 创建数据的备份您可以通过从系统shell中调用 ndb_mgm 客户端START BACKUP命令来完成此操作,如下所示:

    外壳> ndb_mgm -e "START BACKUP 1"
    

    这假定所需的备份ID是1。

  2. 创建模式的备份。在NDB 7.5.2和更高版本中,只有每个节点组的LCP线程或LQH线程总数发生更改时,才需要执行此步骤。

          
    外壳> mysqldump --no-data --routines --events --triggers --databases > myschema.sql
    
    重要

    一旦NDB 使用ndb_mgm创建了本地备份,在创建模式备份之前,您不能进行任何模式更改(如果这样做)。

  3. 将备份目录复制到新群集。例如,如果要还原的备份具有ID 1和 BackupDataDir= ,则此节点上的备份路径为 在这个目录里面有三个文件,列在这里: /backups/node_nodeid/backups/node_1/BACKUP/BACKUP-1

    • BACKUP-1-0.1.Data

    • BACKUP-1.1.ctl

    • BACKUP-1.1.log

    您应该将整个目录复制到新节点。

    如果您需要创建模式文件,请将其复制到SQL节点上可由mysqld读取的位置

不需要从特定节点或节点恢复备份。

要从刚刚创建的备份中恢复,请执行以下步骤:

  1. 还原模式

    • 如果您使用mysqldump创建了单独的模式备份文件 ,请使用mysql客户端导入此文件,与此处显示的内容类似:

      外壳> mysql < myschema.sql
      

      导入模式文件时,除了显示的内容外,您还需要指定--user--password选项(可能还有其他选项),以便mysql客户端能够连接到MySQL服务器。

    • 如果你是不是需要创建一个模式文件,你可以重新创建使用模式 ndb_restore --restore_meta (缩写形式-m),类似于下面显示的那样:

      shell> ndb_restore --nodeid = 1 --backupid = 1 --restore_meta --backup-path = / backups / node_1 / BACKUP / BACKUP-1
      

      ndb_restore必须能够联系管理服务器; --ndb-connectstring 根据需要添加 选项以使其成为可能。

  2. 恢复数据这需要对原始集群中的每个数据节点执行一次,每次使用该数据节点的节点ID。假设最初有4个数据节点,则所需的命令集看起来像这样:

    ndb_restore --nodeid = 1 --backupid = 1 --restore_data --backup_path = / backups / node_1 / BACKUP / BACKUP-1 --disable-indexes
    ndb_restore --nodeid = 2 --backupid = 1 --restore_data --backup_path = / backups / node_2 / BACKUP / BACKUP-1 --disable-indexes
    ndb_restore --nodeid = 3 --backupid = 1 --restore_data --backup_path = / backups / node_3 / BACKUP / BACKUP-1 --disable-indexes
    ndb_restore --nodeid = 4 --backupid = 1 --restore_data --backup_path = / backups / node_4 / BACKUP / BACKUP-1 --disable-indexes
    

    这些可以并行运行。

    一定要--ndb-connectstring 根据需要添加 选项。

  3. 重建索引这些被--disable-indexes 在刚刚显示的命令中使用选项禁用 重新创建索引避免了由于还原在所有点不一致而导致的错误。在某些情况下重建索引也可以提高性能。要重建索引,请在单个节点上执行一次以下命令:

    外壳> ndb_restore --nodeid=1 --backupid=1 --backup_path=/backups/node_1/BACKUP/BACKUP-1 --rebuild-indexes
    

    如前所述,您可能需要添加该 --ndb-connectstring 选项,以便ndb_restore可以联系管理服务器。

21.4.25  ndb_select_all - 从NDB表中打印行

ndb_select_allNDB表格中的所有行打印 stdout

用法

ndb_select_all -c -d [> ]
connection_string tbl_namedb_namefile_name

下表包含特定于NDB群集本机备份恢复程序 ndb_select_all的选项其他说明在表格后面。对于大多数NDB集群程序(包括ndb_select_all)的常见选项,请参见 第21.4.32节“NDB集群程序的通用选项 - NDB集群程序的通用选项”

表21.327 ndb_select_all程序的命令行选项

格式 描述 已添加,已弃用或已删除

--database=dbname

-d

在其中找到该表的数据库的名称

所有基于MySQL 5.7的版本

--parallelism=#

-p

并行度

所有基于MySQL 5.7的版本

--lock=#

-l

锁定类型

所有基于MySQL 5.7的版本

--order=index

-o

根据提供名称的索引对结果集进行排序

所有基于MySQL 5.7的版本

--descending

-z

按降序排序结果集(需要命令标志)

所有基于MySQL 5.7的版本

--header

-h

打印标题(设置为0 | FALSE可在输出中禁用标题)

所有基于MySQL 5.7的版本

--useHexFormat

-x

以十六进制格式输出数字

所有基于MySQL 5.7的版本

--delimiter=char

-D

设置列分隔符

所有基于MySQL 5.7的版本

--disk

打印磁盘引用(仅用于具有非索引列的磁盘数据表)

所有基于MySQL 5.7的版本

--rowid

打印rowid

所有基于MySQL 5.7的版本

--gci

在输出中包含GCI

所有基于MySQL 5.7的版本

--gci64

在输出中包含GCI和行纪元

所有基于MySQL 5.7的版本

--tupscan

-t

按照顺序扫描

所有基于MySQL 5.7的版本

--nodata

不要打印表格列数据

所有基于MySQL 5.7的版本


  • --database=dbname-d dbname

    在其中找到该表的数据库的名称。默认值是TEST_DB

  • parallelism=#-p #

    指定并行度。

  • --lock=lock_type-l lock_type

    阅读表时使用锁。可能的值 lock_type是:

    • 0:读锁

    • 1:在保持状态下读取锁定

    • 2:独占读锁

    此选项没有默认值。

  • --order=index_name-o index_name

    根据指定的索引对输出进行排序 index_name

    注意

    这是索引的名称,而不是列的名称; 索引必须在创建时明确命名。

  • --descending-z

    按降序对输出进行排序。该选项只能与-o--order)选项一起使用

  • --header=FALSE

    从输出中排除列标题。

  • --useHexFormat -x

    使所有数值以十六进制格式显示。这不会影响包含在字符串或日期时间值中的数字的输出。

  • --delimiter=character-D character

    使该character被用作列分隔符。只有表格数据列由此分隔符分隔。

    默认分隔符是制表符。

  • --disk

    将磁盘引用列添加到输出。只有具有非索引列的磁盘数据表的列不为空。

  • --rowid

    添加一ROWID列提供有关存储行的片段的信息。

  • --gci

    GCI在输出中 添加一列,显示每行最后更新的全局检查点。有关检查点的更多信息请参见第21.1节“NDB群集概述”第21.5.6.2节“NDB群集日志事件”

  • --gci64

    ROW$GCI64在输出中 添加一列,显示每行最后更新的全局检查点以及此更新发生的时期编号。

  • --tupscan-t

    按照元组的顺序扫描表。

  • --nodata

    导致任何表数据被忽略。

示例输出

从MySQL SELECT 语句输出

MySQL的> SELECT * FROM ctest1.fish;
+ ---- + ----------- +
| id | 名称|
+ ---- + ----------- +
| 3 | 鲨鱼|
| 6 | puffer |
| 2 | 金枪鱼|
| 4 | 蝠| |
| 5 | 石斑鱼|
| 1 | guppy |
+ ---- + ----------- +
设置6行(0.04秒)

来自等效的ndb_select_all调用的 输出

外壳> ./ndb_select_all -c localhost fish -d ctest1
id名称
3 [鲨鱼]
6 [河豚]
2 [金枪鱼]
4 [蝠]]
5 [石斑鱼]
1 [guppy]
6行返回

NDBT_ProgramExit:0  - 确定

所有字符串值ndb_select_all的输出中用方括号([... ]起来再举一个例子,考虑如下所示创建和填充表格:

CREATE TABLE狗(
    id INT(11)NOT NULL AUTO_INCREMENT,
    名称VARCHAR(25)NOT NULL,
    品种VARCHAR(50)NOT NULL,
    PRIMARY KEY PK(ID),
    KEY ix(名称)
TABLESPACE ts STORAGE DISK
ENGINE = NDBCLUSTER;

插入狗的价值
    ('','Lassie','collie'),
    ('','Scooby-Doo','大丹'),
    ('','Rin-Tin-Tin','Alsatian'),
    ('','Rosscoe','Mutt');

这演示了使用几个额外的 ndb_select_all选项:

外壳> ./ndb_select_all -d ctest1 dogs -o ix -z --gci --disk
GCI id名称品种DISK_REF
834461 2 [Scooby-Doo] [大丹犬] [m_file_no:0 m_page:98 m_page_idx:0]
834878 4 [Rosscoe] [Mutt] [m_file_no:0 m_page:98 m_page_idx:16]
834463 3 [Rin-Tin-Tin] [Alsatian] [m_file_no:0 m_page:34 m_page_idx:0]
835657 1 [Lassie] [牧羊犬] [m_file_no:0 m_page:66 m_page_idx:0]
返回4行

NDBT_ProgramExit:0  - 确定

21.4.26  ndb_select_count - 为NDB表打印行计数

ndb_select_count打印一个或多个NDB表中的行数使用单个表时,结果与通过使用MySQL语句获得的结果相同SELECT COUNT(*) FROM tbl_name

用法

ndb_select_count [-c connection_string] -d [,[,...]]
db_name tbl_nametbl_name2

下表包含特定于NDB群集本机备份还原程序 ndb_select_count的选项其他说明在表格后面。有关大多数NDB群集程序(包括ndb_select_count常见的选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.328 ndb_select_count程序的命令行选项

格式 描述 已添加,已弃用或已删除

--database=dbname

-d

在其中找到该表的数据库的名称

所有基于MySQL 5.7的版本

--parallelism=#

-p

并行度

所有基于MySQL 5.7的版本

--lock=#

-l

锁定类型

所有基于MySQL 5.7的版本


您可以通过在调用此命令时列出由空格分隔的表名来获取同一数据库中多个表的行数,如示例输出下所示

示例输出

外壳> ./ndb_select_count -c localhost -d ctest1 fish dogs
餐桌上有6条记录
表中有4条记录

NDBT_ProgramExit:0  - 确定

21.4.27  ndb_setup.py - 为NDB群集启动基于浏览器的自动安装程序

ndb_setup.py启动NDB群集自动安装程序,并在默认的Web浏览器中打开安装程序的开始页面。

重要

此程序旨在作为普通用户而不是mysql系统 root或其他管理帐户来调用

本节仅介绍命令行工具的用法和程序选项。有关使用在调用ndb_setup.py时生成的自动安装程序GUI的信息 ,请参见 第21.2.1节“NDB群集自动安装程序”

用法

所有平台:

ndb_setup.py [ options]

另外,仅在Windows平台上:

setup.bat [ options]

下表包含NDB群集安装和配置程序ndb_setup.py支持的所有选项 其他说明在表格后面。

表21.329 ndb_setup.py程序的命令行选项

格式 描述 已添加,已弃用或已删除

--browser-start-page=filename

-s

网页浏览器在启动时打开的页面。

所有基于MySQL 5.7的版本

--ca-certs-file=filename

-a

包含允许连接到服务器的客户端证书列表的文件

所有基于MySQL 5.7的版本

--cert-file=filename

-c

包含标识服务器的X509证书的文件。(默认:cfg.pem)

所有基于MySQL 5.7的版本

--debug-level=level

-d

Python日志记录模块调试级别。其中一个是DEBUG,INFO,WARNING(默认),ERROR或CRITICAL。

所有基于MySQL 5.7的版本

--help

-h

打印帮助信息

所有基于MySQL 5.7的版本

--key-file=file

-k

指定包含私钥的文件(如果不包含在--cert-file中)

所有基于MySQL 5.7的版本

--no-browser

-n

不要在浏览器中打开起始页面,只需启动该工具

所有基于MySQL 5.7的版本

--port=#

-p

指定Web服务器使用的端口

所有基于MySQL 5.7的版本

--server-log-file=file

o

将请求记录到此文件。使用' - '强制日志记录到stderr。

所有基于MySQL 5.7的版本

--server-name=name

-N

与之连接的服务器的名称

所有基于MySQL 5.7的版本

--use-https

-S

使用加密(HTTPS)客户端/服务器连接

所有基于MySQL 5.7的版本


  • --browser-start-page=file-s

    属性
    命令行格式 --browser-start-page=filename
    类型
    默认 index.html

    指定要在浏览器中打开的文件作为安装和配置开始页面。默认是 index.html

  • --ca-certs-file=file-a

    属性
    命令行格式 --ca-certs-file=filename
    类型 文件名
    默认 [none]

    指定一个文件,其中包含允许连接到服务器的客户端证书列表。缺省值为空字符串,这意味着不使用客户端身份验证。

  • --cert-file=file-c

    属性
    命令行格式 --cert-file=filename
    类型 文件名
    默认 cfg.pem

    指定一个包含标识服务器的X509证书的文件。证书可能是自签名的。默认是cfg.pem

  • --debug-level=level-d

    属性
    命令行格式 --debug-level=level
    类型 列举
    默认 WARNING
    有效值

    WARNING

    DEBUG

    INFO

    ERROR

    CRITICAL

    设置Python日志记录模块调试级别。这是一个 DEBUGINFOWARNINGERROR,或 CRITICALWARNING是默认值。

  • --help-h

    属性
    命令行格式 --help

    打印帮助信息。

  • --key-file=file-d

    属性
    命令行格式 --key-file=file
    类型 文件名
    默认 [none]

    如果X509证书文件(--cert-file)中没有包含私钥,则指定一个包含私钥的文件默认值是一个空字符串,这意味着不使用这样的文件。

  • --no-browser-n

    属性
    命令行格式 --no-browser

    启动安装和配置工具,但不要在浏览器中打开“开始”页面。

  • --port=#-p

    属性
    命令行格式 --port=#
    类型 数字
    默认 8081
    最低限度 1
    最大 65535

    设置Web服务器使用的端口。默认值是8081。

  • --server-log-file=file-o

    属性
    命令行格式

    --server-log-file=file

    o

    类型 文件名
    默认 ndb_setup.log
    有效值

    ndb_setup.log

    - (登录到stderr)

    将请求记录到此文件。默认是 ndb_setup.log要指定日志记录 stderr而不是文件,请使用 -(短划线字符)作为文件名。

  • --server-name=host-N

    属性
    命令行格式 --server-name=name
    类型
    默认 localhost

    指定连接时浏览器使用的主机名或IP地址。默认是 localhost

  • --use-https-S

    属性
    命令行格式 --use-https

    使浏览器使用与服务器的安全(HTTPS)连接。

21.4.28  ndb_show_tables - 显示NDB表的列表

ndb_show_tables显示NDB集群中所有数据库对象的列表 默认情况下,这不仅包括用户创建的表和NDB系统表,还包括 NDB特定索引,内部触发器和NDB集群磁盘数据对象。

下表包含特定于NDB群集本机备份恢复程序 ndb_show_tables的选项其他说明在表格后面。有关大多数NDB群集程序(包括ndb_show_tables)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.330 ndb_show_tables程序的命令行选项

格式 描述 已添加,已弃用或已删除

--database=string

-d

指定找到该表的数据库

所有基于MySQL 5.7的版本

--loops=#

-l

重复输出的次数

所有基于MySQL 5.7的版本

--parsable

-p

返回适合MySQL LOAD DATA INFILE语句的输出

所有基于MySQL 5.7的版本

--show-temp-status

显示表临时标志

所有基于MySQL 5.7的版本

--type=#

-t

将输出限制为此类型的对象

所有基于MySQL 5.7的版本

--unqualified

-u

不要限定表名

所有基于MySQL 5.7的版本


用法

ndb_show_tables [-c connection_string]
  • --database-d

    指定找到表的数据库的名称。如果未指定此选项,并且在TEST_DB数据库中找不到表格ndb_show_tables将发出警告。

  • --loops-l

    指定该实用程序应执行的次数。如果未指定此选项,则此值为1,但如果确实使用该选项,则必须为其提供一个整数参数。

  • --parsable-p

    使用此选项会使输出成为适合使用的格式 LOAD DATA INFILE

  • --show-temp-status

    如果指定,则会导致显示临时表。

  • --type-t

    可用于将输出限制为一种类型的对象,由整数类型代码指定,如下所示:

    • 1:系统表

    • 2:用户创建的表格

    • 3:独特的散列索引

    任何其他值都会导致NDB 列出所有数据库对象(默认值)。

  • --unqualified-u

    如果指定,则会导致显示不合格的对象名称。

注意

只有用户创建的NDB簇表可以从MySQL访问; 系统表(如mysqldSYSTAB_0不可见)但是,您可以使用API应用程序(如 ndb_select_all)检查系统表的内容 (请参见 第21.4.25节“ ndb_select_all - 从NDB表打印行”)。 NDB

21.4.29  ndb_size.pl - NDBCLUSTER大小需求估计器

这是一个Perl脚本,可用于估算MySQL数据库转换为使用NDBCLUSTER 存储引擎所需的空间量与本节讨论的其他实用程序不同,它不需要访问NDB群集(事实上,没有理由这样做)。但是,它确实需要访问待测试数据库所在的MySQL服务器。

要求

  • 正在运行的MySQL服务器。服务器实例不必为NDB集群提供支持。

  • Perl的工作安装。

  • DBI模块可以从CPAN获得,如果它还不是您的Perl安装的一部分。(许多Linux和其他操作系统发行版为这个库提供它们自己的软件包。)

  • 具有必要权限的MySQL用户帐户。如果您不想使用现有帐户,那么使用-where 创建一个是要检查的数据库的名称 - 就足以达到此目的。 GRANT USAGE ON db_name.*db_name

ndb_size.pl也可以在MySQL的资源中找到storage/ndb/tools

下表包含特定于NDB群集程序ndb_size.pl的选项其他说明在表格后面。有关大多数NDB群集程序(包括ndb_size.pl)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.331 ndb_size.pl程序的命令行选项

格式 描述 已添加,已弃用或已删除

--database=dbname

要检查的数据库或数据库; 接受逗号分隔的列表; 默认为ALL(使用服务器上的所有数据库)

所有基于MySQL 5.7的版本

--hostname[:port]

指定主机和可选端口作为主机[:端口]

所有基于MySQL 5.7的版本

--socket=file_name

指定一个要连接的套接字

所有基于MySQL 5.7的版本

--user=string

指定一个MySQL用户名

所有基于MySQL 5.7的版本

--password=string

指定一个MySQL用户密码

所有基于MySQL 5.7的版本

--format=string

设置输出格式(文本或HTML)

所有基于MySQL 5.7的版本

--excludetables=tbl_list

跳过以逗号分隔的表格列表中的任何表格

所有基于MySQL 5.7的版本

--excludedbs=db_list

跳过以逗号分隔的数据库列表中的任何数据库

所有基于MySQL 5.7的版本

--savequeries=file

将对数据库的所有查询保存到指定的文件中

所有基于MySQL 5.7的版本

--loadqueries=file

加载指定文件中的所有查询; 不连接到数据库

所有基于MySQL 5.7的版本

--real_table_name=table

指定一个表来处理唯一的索引大小计算

所有基于MySQL 5.7的版本


用法

perl ndb_size.pl [--database = { db_name| ALL}] [--hostname = host[:port]] [--socket = socket] \
      [--user = user] [--password = password] \
      [--help | -h] [--format = {html | text}] \
      [--loadqueries = file_name] [--savequeries = file_name]

默认情况下,该实用程序尝试分析服务器上的所有数据库。您可以使用该--database选项指定单个数据库 ; 可以通过使用ALL数据库的名称来明确默认行为您还可以通过使用--excludedbs带逗号分隔的要跳过的数据库名称列表选项来排除一个或多个数据库同样,通过按照可选--excludetables选项列出其名称(用逗号分隔),可以使特定表跳过主机名称可以使用--hostname; 默认是localhost您可以使用以下命令指定主机以外的端口 hostport 格式格式为值--hostname默认端口号是3306.如有必要,您还可以指定一个套接字; 默认是/var/lib/mysql.sockMySQL用户名和密码可以指定相应的选项。也可以使用--format选项来控制输出的格式; 这可以采取两种价值观的htmltexttext被默认。文本输出示例如下所示:

外壳> ndb_size.pl --database=test --socket=/tmp/mysql.sock
ndb_size.pl数据库报告:'test'(1个表格)
--------------------------------------------------
连接到:DBI:mysql:host = localhost; mysql_socket = / tmp / mysql.sock

包括版本信息:4.1,5.0,5.1

test.t1
-------

列的DataMemory(*表示虚拟数据存储器):
         列名称类型Varsized Key 4.1 5.0 5.1
     HIDDEN_NDB_PKEY bigint PRI 8 8 8
                  c2 varchar(50)Y 52 52 4 *
                  c1 int(11)4 4 4
                                                       -   -   - 
固定大小的列DM /行64 64 12
   Varsize列DM /行0 0 4

DataMemory for Indexes:
   索引名称类型4.1 5.0 5.1
      初级BTREE 16 16 16
                                           -   -   - 
       总指数DM /行16 16 16

IndexMemory索引:
               索引名称4.1 5.0 5.1
                  小学33 16 16
                                  -   -   - 
           索引IM /行33 16 16

总结(本表格):
                                 4.1 5.0 5.1
    固定架空DM /行12 12 16
           NULL字节/行4 4 4
           数据存储器/行96 96 48
                    (包括开销,位图和索引)

  Varsize开销DM /行0 0 8
   Varsize NULL字节/行0 0 4
       Avg Varside DM / Row 0 0 16

                 编号行0 0 0

        行/ 32kb DM Page 340 340 680
固定数据存储器(KB)0 0 0

行/ 32kb Varsize DM Page 0 0 2040
  Varsize DataMemory(KB)0 0 0

         行/ 8kb IM Page 248 512 512
         IndexMemory(KB)0 0 0

参数最低要求
------------------------------
*表示大于默认值

                参数默认值4.1 5.0 5.1
          数据存储器(KB)81920 0 0 0
       NoOfOrderedIndexes 128 1 1 1
               NoOfTables 128 1 1 1
         IndexMemory(KB)18432 0 0 0
    NoOfUniqueHashIndexes 64 0 0 0
           NoOfAttributes 1000 3 3 3
             NoOfTriggers 768 5 5 5

出于调试的目的,包含由该脚本运行的查询的Perl数组可以从指定的文件读取,可以使用保存到文件--savequeries; 可以使用指定包含要在脚本执行期间读入的数组的文件--loadqueries这些选项都没有默认值。

要以HTML格式生成输出,请使用该 --format选项并将输出重定向到文件,如下所示:

外壳> ndb_size.pl --database=test --socket=/tmp/mysql.sock --format=html > ndb_size.html

(没有重定向,输出被发送到 stdout。)

此脚本的输出包含以下信息:

21.4.30  ndb_top - 查看NDB线程的CPU使用情况信息

ndb_top显示终端中有关NDB群集数据节点上NDB线程的CPU使用情况的运行信息。每个线程由输出中的两行表示,第一行显示系统统计信息,第二行显示线程的测量统计信息。

ndb_top可以从MySQL NDB Cluster 7.6.3开始。

用法

ndb_top [-h hostname] [-t port] [-u user] [-p pass] [-n node_id]

ndb_top连接到作为群集的SQL节点运行的MySQL服务器。默认情况下,它会尝试连接到运行在端口3306 mysqldlocalhost,作为root没有指定密码的MySQL 用户。您可以分别使用--host-h)和 --port-t来覆盖默认主机和端口 要指定MySQL用户和密码,请使用 --user-u)和 --passwd-p)选项。该用户必须能够读取ndbinfo数据库中的 ndb_top使用来自 ndbinfo.cpustat相关表的信息)。

有关MySQL用户帐户和密码的更多信息,请参见第6.3节“MySQL用户帐户管理”以及 第6.2节“MySQL Access Privilege System”

输出以纯文本或ASCII图表形式提供; 您可以分别使用--text-x)和 --graph-g)选项指定这两种显示模式提供相同的信息; 它们可以同时使用。至少必须使用一种显示模式。

图形的颜色显示默认支持并启用(--color-c 选项)。启用彩色支持后,图形显示将显示蓝色的OS用户时间,绿色的OS系统时间和空白的空闲时间。对于测量的负载,蓝色用于执行时间,黄色表示发送时间,红色表示发送缓冲区完全等待所用的时间,空闲时间表示空白。图形显示中显示的百分比是所有非空闲线程的百分比总和。颜色目前不可配置; 你可以使用灰度代替 --skip-color

排序视图(--sort-r)基于测量的负载和OS报告的负载的最大值。显示这些可以使用--measured-load-m)和 --os-load-o)选项启用和禁用 必须启用至少显示其中一个负载。

该程序试图从具有由--node-id-n)选项给出的节点ID的数据节点获得统计信息 ; 如果未指定,则为1. ndb_top 无法提供有关其他类型节点的信息。

该视图根据终端窗口的高度和宽度进行调整; 最小支持的宽度是76个字符。

一旦开始,ndb_top不断运行,直到被迫退出; 你可以使用退出程序 Ctrl-C显示屏每秒更新一次; 要设置不同的延迟时间间隔,请使用 --sleep-time-s)。

注意

ndb_top可在Mac OS X,Linux和Solaris上使用。它目前不支持Windows平台。

下表包括特定于NDB群集程序ndb_top的所有选项其他说明在表格后面。

表21.332 ndb_top程序的命令行选项

格式 描述 已添加,已弃用或已删除

--color

-c

以彩色显示ASCII图形; 使用--skip-colors禁用

ADDED:NDB 7.6.3

--graph

-g

使用图形显示数据; 使用--skip-graphs禁用

ADDED:NDB 7.6.3

--help

-?

显示程序使用信息

ADDED:NDB 7.6.3

--host[=name]

-h

连接到MySQL服务器的主机名或IP地址

ADDED:NDB 7.6.3

--measured-load

-m

按线程显示测量的负载

ADDED:NDB 7.6.3

--node-id[=#]

-n

观看具有此节点ID的节点

ADDED:NDB 7.6.3

--os-load

-o

显示操作系统测量的负载

ADDED:NDB 7.6.3

--passwd[=password]

-p

使用此密码连接; 弃用

ADDED:NDB 7.6.3

删除:NDB 7.6.4

--password[=password]

-p

使用此密码连接

ADDED:NDB 7.6.5

--port[=#]

-t (<= 7.6.4),

-P (> = 7.6.5)

连接到MySQL服务器时使用的端口号

ADDED:NDB 7.6.3

--sleep-time[=seconds]

-s

显示刷新之间的等待时间,以秒为单位

ADDED:NDB 7.6.3

--sort

-r

按用途排序线程; 使用--skip-sort来禁用

ADDED:NDB 7.6.3

--text

-x (<= 7.6.4),

-t (> = 7.6.5)

使用文本显示数据

ADDED:NDB 7.6.3

--user[=name]

-u

以此MySQL用户身份连接

ADDED:NDB 7.6.3


其他选项

  • --color-c

    属性
    命令行格式 --color
    介绍 19年7月5日 - NDB-7.6.3
    类型 布尔
    默认 TRUE

    以彩色显示ASCII图形; 用于 --skip-colors禁用。

  • --graph-g

    属性
    命令行格式 --graph
    介绍 19年7月5日 - NDB-7.6.3
    类型 布尔
    默认 TRUE

    使用图形显示数据; 用于 --skip-graphs禁用。这个选项或者 --text必须是真的; 这两种选择都可能是真的。

  • --help-?

    属性
    命令行格式 --help
    介绍 19年7月5日 - NDB-7.6.3
    类型 布尔
    默认 TRUE

    显示程序使用信息。

  • --host[= name]-h

    属性
    命令行格式 --host[=name]
    介绍 19年7月5日 - NDB-7.6.3
    类型
    默认 localhost

    连接到MySQL服务器的主机名或IP地址。

  • --measured-load-m

    属性
    命令行格式 --measured-load
    介绍 19年7月5日 - NDB-7.6.3
    类型 布尔
    默认 FALSE

    按线程显示测量的负载。这个选项或者 --os-load必须是真的; 这两种选择都可能是真的。

  • --node-id[= #]-n

    属性
    命令行格式 --node-id[=#]
    介绍 19年7月5日 - NDB-7.6.3
    类型 整数
    默认 1

    观察具有此节点ID的数据节点。

  • --os-load-o

    属性
    命令行格式 --os-load
    介绍 19年7月5日 - NDB-7.6.3
    类型 布尔
    默认 TRUE

    显示操作系统测量的负载。这个选项或者 --measured-load必须是真的; 这两种选择都可能是真的。

  • --passwd[= password]-p

    属性
    命令行格式 --passwd[=password]
    介绍 19年7月5日 - NDB-7.6.3
    删除 20年7月5日 - NDB-7.6.4
    类型 布尔
    默认 NULL

    使用此密码连接。

    该选项在NDB 7.6.4中已弃用。它在NDB 7.6.5中被删除,并由--password选项替换 (Bug#26907833)

  • --password[= password]-p

    属性
    命令行格式 --password[=password]
    介绍 21年7月5日 - NDB-7.6.5
    类型 布尔
    默认 NULL

    使用此密码连接。

    该选项已添加到NDB 7.6.5中,作为--passwd以前使用选项的替代品 (Bug#26907833)

  • --port[= #]-t(NDB 7.6.5和更高版本: -P

    属性
    命令行格式 --port[=#]
    介绍 19年7月5日 - NDB-7.6.3
    类型 整数
    默认 3306

    连接到MySQL服务器时使用的端口号。

    与NDB 7.6.5开始,此选项的简短形式 -P,并且-t被改变用途作为短格式的 --text选项。(Bug#26907833)

  • --sleep-time[= seconds]-s

    属性
    命令行格式 --sleep-time[=seconds]
    介绍 19年7月5日 - NDB-7.6.3
    类型 整数
    默认 1

    显示刷新之间的等待时间,以秒为单位。

  • --sort-r

    属性
    命令行格式 --sort
    介绍 19年7月5日 - NDB-7.6.3
    类型 布尔
    默认 TRUE

    按用途排序线程; 用于--skip-sort禁用。

  • --text-x(NDB 7.6.5和更高版本:-t

    属性
    命令行格式 --text
    介绍 19年7月5日 - NDB-7.6.3
    类型 布尔
    默认 FALSE

    使用文本显示数据。这个选项或者 --graph必须是真的; 这两种选择都可能是真的。

    从NDB 7.6.5开始,此选项的简要格式是, -t并且支持-x被删除。(Bug#26907833)

  • --user[= name]-u

    属性
    命令行格式 --user[=name]
    介绍 19年7月5日 - NDB-7.6.3
    类型
    默认 root

    以此MySQL用户身份连接。

示例输出。  下图显示了ndb_top运行在Linux系统的终端窗口中,其中 ndbmtd数据节点处于中等负载状态。在这里,程序已经使用 ndb_top 来提供文本和图形输出: -n8 -x

图21.23 ndb_top在终端中运行

Display from ndb_top, running in a terminal window. Shows information for each node, including the utilized resources.

21.4.31  ndb_waiter - 等待NDB集群达到给定状态

ndb_waiter重复(每100毫秒)打印所有群集数据节点的状态,直到群集达到给定状态或 --timeout超出限制,然后退出。默认情况下,它等待群集达到 STARTED状态,其中所有节点已启动并连接到群集。这可以使用--no-contact--not-started选项来覆盖

该实用程序报告的节点状态如下所示:

  • NO_CONTACT:无法联系节点。

  • UNKNOWN:可以联系节点,但其状态尚不明确。通常,这意味着该节点已收到 来自管理服务器的命令STARTRESTART命令,但尚未对其执行操作。

  • NOT_STARTED:节点已停止,但仍与群集保持联系。这在使用管理客户端的RESTART命令重新启动节点时可见

  • STARTING:节点的 ndbd进程已启动,但节点尚未加入群集。

  • STARTED:该节点可操作,并已加入群集。

  • SHUTTING_DOWN:节点正在关闭。

  • SINGLE USER MODE:当群集处于单用户模式时,会显示所有群集数据节点。

下表包含特定于NDB群集本机备份恢复程序 ndb_waiter的选项其他说明在表格后面。有关大多数NDB群集程序(包括ndb_waiter)的常见选项,请参见 第21.4.32节“NDB群集程序的通用选项 - NDB群集程序的通用选项”

表21.333 ndb_waiter程序的命令行选项

格式 描述 已添加,已弃用或已删除

--no-contact

-n

等待群集达到NO CONTACT状态

所有基于MySQL 5.7的版本

--not-started

等待群集达到NOT STARTED状态

所有基于MySQL 5.7的版本

--single-user

等待群集进入单用户模式

所有基于MySQL 5.7的版本

--timeout=#

-t

等待几秒钟,然后退出群集是否达到所需状态; 默认为2分钟(120秒)

所有基于MySQL 5.7的版本

--nowait-nodes=list

不等待的节点列表。

所有基于MySQL 5.7的版本

--wait-nodes=list

-w

待等待的节点列表。

所有基于MySQL 5.7的版本


用法

ndb_waiter [-c connection_string]

其他选项

  • --no-contact-n

    ndb_waiter 不会等待STARTED状态, 而是继续运行,直到群集NO_CONTACT在退出之前达到状态。

  • --not-started

    ndb_waiter 不会等待STARTED状态, 而是继续运行,直到群集NOT_STARTED在退出之前达到状态。

  • --timeout=seconds-t seconds

    等待时间。如果在此秒数内未达到所需状态,程序将退出。默认值是120秒(1200个报告周期)。

  • --single-user

    程序等待群集进入单用户模式。

  • --nowait-nodes=list

    使用此选项时,ndb_waiter不会等待列出其ID的节点。该列表以逗号分隔; 范围可以用破折号表示,如下所示:

    外壳> ndb_waiter --nowait-nodes=1,3,7-9
    
    重要

    不要与一起使用此选项--wait-nodes 选项。

  • --wait-nodes=list-w list

    使用此选项时,ndb_waiter 仅等待列出其ID的节点。该列表以逗号分隔; 范围可以用破折号表示,如下所示:

    外壳> ndb_waiter --wait-nodes=2,4-6,10
    
    重要

    不要与一起使用此选项--nowait-nodes 选项。

示例输出。  此处显示的是ndb_waiter的输出, 当它运行在一个4节点集群中时,其中两个节点已关闭,然后再次手动启动。重复报告(由表示...)被省略。

外壳> ./ndb_waiter -c localhost

连接到(localhost)mgmsrv
状态节点1已启动
状态节点2 NO_CONTACT
状态节点3已启动
状态节点4 NO_CONTACT
等待群集进入状态STARTED

...

状态节点1已启动
状态节点2 UNKNOWN
状态节点3已启动
状态节点4 NO_CONTACT
等待群集进入状态STARTED

...

状态节点1已启动
状态节点2启动
状态节点3已启动
状态节点4 NO_CONTACT
等待群集进入状态STARTED

...

状态节点1已启动
状态节点2启动
状态节点3已启动
状态节点4 UNKNOWN
等待群集进入状态STARTED

...

状态节点1已启动
状态节点2启动
状态节点3已启动
状态节点4启动
等待群集进入状态STARTED

...

状态节点1已启动
状态节点2已启动
状态节点3已启动
状态节点4启动
等待群集进入状态STARTED

...

状态节点1已启动
状态节点2已启动
状态节点3已启动
状态节点4已启动
等待群集进入状态STARTED

NDBT_ProgramExit:0  - 确定
注意

如果没有指定连接字符串,则 ndb_waiter会尝试连接管理localhost并进行报告 Connecting to mgmsrv at (null)

21.4.32 NDB群集程序的通用选项 - NDB群集程序的通用选项

所有NDB Cluster程序都接受本节中描述的选项,但以下情况除外:

注意

较早的NDB群集版本的用户应该注意,其中一些选项已被更改,以使它们彼此保持一致,并且也与mysqld保持一致--help除了ndb_print_backup_filendb_print_schema_filendb_print_sys_file之外,您可以将该选项用于任何NDB群集程序 以查看程序支持的选项列表。

下表中的选项对所有NDB集群可执行文件都是通用的(本节前面提到的除外)。

表21.334所有MySQL NDB集群程序共有的命令行选项

格式 描述 已添加,已弃用或已删除

--character-sets-dir=dir_name

安装字符集的目录

所有基于MySQL 5.7的版本

--connect-retries=#

放弃之前设置重试连接的次数

所有基于MySQL 5.7的版本

--connect-retry-delay=#

几秒钟之内尝试联系管理服务器的时间

所有基于MySQL 5.7的版本

--core-file

编写错误核心(在调试版本中默认为TRUE)

所有基于MySQL 5.7的版本

--debug=options

从调试调用启用输出。只能用于启用了调试的编译版本

所有基于MySQL 5.7的版本

--defaults-extra-file=filename

全局选项文件读取后读取此文件

所有基于MySQL 5.7的版本

--defaults-file=filename

从此文件读取默认选项

所有基于MySQL 5.7的版本

--defaults-group-suffix

还读取名称以此后缀结尾的组

所有基于MySQL 5.7的版本

--help

--usage

-?

显示帮助信息并退出

所有基于MySQL 5.7的版本

--login-path=path

从登录文件中读取此路径

所有基于MySQL 5.7的版本

--ndb-connectstring=connectstring

--connect-string=connectstring

-c

设置连接字符串以连接到ndb_mgmd。语法:[nodeid = <id>;] [host =] <hostname> [:<port>]。覆盖NDB_CONNECTSTRING或my.cnf中指定的条目。

所有基于MySQL 5.7的版本

--ndb-mgmd-host=host[:port]

设置主机(和端口,如果需要)以连接到管理服务器

所有基于MySQL 5.7的版本

--ndb-nodeid=#

为此节点设置节点ID

所有基于MySQL 5.7的版本

--ndb-optimized-node-selection

以更优化的方式选择交易节点

所有基于MySQL 5.7的版本

--no-defaults

不要从登录文件以外的任何选项文件中读取默认选项

所有基于MySQL 5.7的版本

--print-defaults

打印程序参数列表并退出

所有基于MySQL 5.7的版本

--version

-V

输出版本信息并退出

所有基于MySQL 5.7的版本


有关特定于各个NDB Cluster程序的选项,请参见 第21.4节“NDB Cluster程序”

有关NDB群集mysqld选项请参见第21.3.3.9.1节“用于NDB群集的MySQL服务器选项”

  • --character-sets-dir=name

    属性
    命令行格式 --character-sets-dir=dir_name
    类型 目录名称
    默认

    告诉程序在哪里可以找到字符集信息。

  • --connect-retries=#

    属性
    命令行格式 --connect-retries=#
    类型 数字
    默认 12
    最低限度 0
    最大 4294967295

    此选项指定在放弃之前第一次尝试重新尝试连接之后的次数(客户端始终尝试连接至少一次)。每次尝试等待的时间长度均使用 --connect-retry-delay

    注意

    ndb_mgm一起使用时,此选项的默认值为 3。有关更多信息请参见 第21.4.5节“ ndb_mgm - NDB集群管理客户端”

  • --connect-retry-delay=#

    属性
    命令行格式 --connect-retry-delay=#
    类型(> = 5.7.10-ndb-7.5.0) 数字
    类型 数字
    默认(> = 5.7.10-ndb-7.5.0) 5
    默认 5
    最小值(> = 5.7.10-ndb-7.5.0) 1
    最低限度 0
    最大(> = 5.7.10-ndb-7.5.0) 4294967295
    最大 4294967295

    此选项指定在放弃之前每次尝试连接时等待的时间长度。尝试连接的次数由设置 --connect-retries

  • --core-file

    属性
    命令行格式 --core-file
    类型 布尔
    默认 FALSE

    如果程序死掉,写一个核心文件。核心文件的名称和位置取决于系统。(对于在Linux上运行的NDB Cluster程序节点,默认位置是程序的工作目录 - 对于数据节点,这是节点的 DataDir。)对于某些系统,可能存在限制或限制; 例如,在启动服务器之前可能需要执行ulimit -c unlimited有关详细信息,请参阅系统文档。

    如果使用配置--debug 选项构建NDB群集,则 默认情况下启用NDB群集对于常规构建,默认情况下是禁用的。 --core-file--core-file

  • --debug[=options]

    属性
    命令行格式 --debug=options
    类型
    默认 d:t:O,/tmp/ndb_restore.trace

    该选项只能用于启用了调试功能的版本。它用于以与mysqld进程相同的方式启用调试输出的输出

  • --defaults-extra-file=filename

    属性
    命令行格式 --defaults-extra-file=filename
    类型
    默认 [none]

    全局选项文件读取后读取此文件。

  • --defaults-file=filename

    属性
    命令行格式 --defaults-file=filename
    类型
    默认 [none]

    从此文件读取默认选项。

  • --defaults-group-suffix

    属性
    命令行格式 --defaults-group-suffix
    类型
    默认 [none]

    还读取名称以此后缀结尾的组。

  • --help--usage-?

    属性
    命令行格式

    --help

    --usage

    用可用命令选项的描述打印一个简短列表。

  • --login-path=path

    属性
    命令行格式 --login-path=path
    类型
    默认 [none]

    从登录文件中读取此路径。

  • --ndb-connectstring=connection_string--connect-string=connection_string-c connection_string

    属性
    命令行格式

    --ndb-connectstring=connectstring

    --connect-string=connectstring

    类型
    默认 localhost:1186

    此选项采用指定应用程序要连接的管理服务器的NDB群集连接字符串,如下所示:

    外壳> ndbd --ndb-connectstring="nodeid=2;host=ndb_mgmd.mysql.com:1186"
    

    有关更多信息,请参见 第21.3.3.3节“NDB群集连接字符串”

  • --ndb-mgmd-host=host[:port]

    属性
    命令行格式 --ndb-mgmd-host=host[:port]
    类型
    默认 localhost:1186

    可用于设置程序要连接的单个管理服务器的主机和端口号。如果程序在其连接信息中需要节点ID或对多个管理服务器(或两者)的引用,请改用该 --ndb-connectstring 选项。

  • --ndb-nodeid=#

    属性
    命令行格式 --ndb-nodeid=#
    类型 数字
    默认 0

    设置此节点的NDB群集节点标识。允许值的范围取决于节点的类型(数据,管理或API)和NDB集群软件版本有关更多信息,请参见 第21.1.6.2节“来自标准MySQL限制的NDB集群的限制和差异”

  • --no-defaults

    属性
    命令行格式 --no-defaults
    类型 布尔
    默认 TRUE

    不要从登录文件以外的任何选项文件中读取默认选项。

  • --ndb-optimized-node-selection

    属性
    命令行格式 --ndb-optimized-node-selection
    类型 布尔
    默认 TRUE

    优化事务节点的选择。默认启用。

  • --print-defaults

    属性
    命令行格式 --print-defaults
    类型 布尔
    默认 TRUE

    打印程序参数列表并退出。

  • --version-V

    属性
    命令行格式 --version

    打印可执行文件的NDB集群版本号。版本号是相关的,因为并非所有版本都可以一起使用,并且NDB群集启动进程会验证所使用的二进制文件的版本是否可以共存于同一个群集中。执行在线(滚动式)软件升级或降级NDB群集时,这也很重要。

    有关更多信息请参见第21.5.5节“执行NDB群集的滚动重新启动”)。

21.5 NDB集群的管理

管理NDB群集涉及许多任务,其中第一个任务是配置和启动NDB群集。这在 第21.3节“NDB群集的配置”第21.4节“NDB群集程序”中进行了介绍

接下来的几节将介绍正在运行的NDB集群的管理。

有关与NDB群集的管理和部署相关的安全问题的信息,请参见 第21.5.12节“NDB群集安全问题”

基本上有两种主动管理正在运行的NDB群集的方法。第一个是通过使用输入到管理客户端的命令,从而可以检查群集状态,更改日志级别,启动和停止备份以及节点停止并启动。第二种方法涉及研究集群日志的内容 ; 这通常在管理服务器的 目录中找到,但可以使用该选项覆盖此位置 (回想一下,它表示正在记录其活动的节点的唯一标识符。)集群日志包含由ndbd生成的事件报告 也可以将群集日志条目发送到Unix系统日志。 ndb_node_id_cluster.logDataDirLogDestinationnode_id

还可以使用SHOW ENGINE NDB STATUS语句从SQL节点监视群集操作的某些方面

有关NDB群集操作的更多详细信息可通过使用ndbinfo数据库的SQL接口实时提供 有关更多信息,请参见第21.5.10节“ndbinfo:NDB集群信息数据库”

NDB统计计数器使用mysql客户端提供改进的监视 这些在NDB内核中实现的计数器涉及由Ndb对象执行或影响 对象的操作,例如启动,关闭和中止事务; 主键和唯一键操作; 表格,范围和修剪扫描; 阻塞等待各种操作完成的线程; 以及NDB集群发送和接收的数据和事件。NDB API调用完成或数据发送到数据节点或由数据节点接收时,计数器会由NDB内核递增。

mysqld将NDB API统计信息计数器公开为系统状态变量,这些变量可以从所有名称(Ndb_api_)的公共前缀中标识出来这些变量的值可以在 mysql客户端从SHOW STATUS语句的输出中 读取,或者通过查询 SESSION_STATUS表或GLOBAL_STATUS 表(在INFORMATION_SCHEMA数据库中)来读取 通过比较执行作用于NDB的SQL语句之前和之后的状态变量的值 ,可以观察NDB API级别上对此语句所采取的操作,这可能对NDB的监视和性能调整有益簇。

MySQL集群管理器提供了一个高级命令行界面,可简化许多复杂的NDB集群管理任务,如启动,停止或重新启动具有大量节点的NDB集群。MySQL Cluster Manager客户端还支持获取和设置大多数节点配置参数值的命令以及 与NDB集群相关的mysqld服务器选项和变量。有关更多信息,请参阅MySQL™Cluster Manager 1.4.4用户手册

21.5.1 NDB簇起始阶段摘要

本节简要概述了NDB Cluster数据节点启动时涉及的步骤。内部指南”中的NDB Cluster Start Phases中可以找到更完整的信息NDB

这些阶段node_id STATUS与管理客户端中命令的输出中报告的阶段相同 (请参见 第21.5.2节“NDB集群管理客户端中的命令”)。这些开始阶段也报道start_phase 了列ndbinfo.nodes 表。

开始类型。  有几种不同的启动类型和模式,如下面的列表所示:

  • 初始开始。  集群在所有数据节点上都以干净的文件系统开始。这发生在集群首次启动时,或者使用该--initial选项重新启动所有数据节点时发生

    注意

    使用时重新启动节点时不会删除磁盘数据文件 --initial

  • 系统重启。  群集启动并读取存储在数据节点中的数据。当集群在使用后关闭时发生这种情况,此时集群需要从其停止点恢复操作。

  • 节点重启。  这是群集本身运行时群集节点的联机重新启动。

  • 初始节点重启。  这与重新启动节点相同,只是节点重新初始化并且使用干净的文件系统启动。

设置和初始化(阶段-1)。  在启动之前,每个数据节点(ndbd 进程)都必须初始化。初始化包含以下步骤:

  1. 获取节点ID

  2. 获取配置数据

  3. 分配用于节点间通信的端口

  4. 根据从配置文件中获得的设置分配内存

当数据节点或SQL节点首次连接到管理节点时,它将保留一个群集节点标识。为确保没有其他节点分配相同的节点ID,将保留此ID直到该节点设法连接到群集,并且至少有一个 ndbd报告该节点已连接。该节点ID的保留由相关节点和ndb_mgmd之间的连接保护

每个数据节点初始化后,群集启动过程就可以继续。这个过程中集群经历的阶段如下所示:

  • 0期 NDBFSNDBCNTR 块启动(见 NDB内核模块)。在使用--initial选项启动的数据节点上清除数据节点文件系统

  • 阶段1.  在这个阶段中,所有剩余的 NDB内核块被启动。NDB群集连接已建立,块间通信已建立,并且心跳已启动。在节点重启的情况下,API节点连接也被检查。

    注意

    当一个或多个节点在阶段1中挂起而其余节点在阶段2中挂起时,这通常表示网络问题。出现此类问题的一个可能原因是具有多个网络接口的一个或多个群集主机。造成这种情况的另一个常见问题来源是阻塞群集节点间通信所需的TCP / IP端口。在后一种情况下,这通常是由于配置错误的防火墙造成的。

  • 第2阶段 NDBCNTR核心模块检查所有现有节点的状态。主节点被选中,并且集群模式文件被初始化。

  • 第3阶段 DBLQHDBTC 内核模块建立它们之间的通信。启动类型已确定; 如果这是重新启动,则 DBDIH块获得执行重新启动的权限。

  • 阶段4.  对于初始启动或初始节点重新启动,将创建重做日志文件。这些文件的数量相等 NoOfFragmentLogFiles

    对于系统重启:

    • 读取模式或模式。

    • 从本地检​​查点读取数据。

    • 应用所有重做信息,直到达到最新的可恢复全局检查点。

    要重新启动节点,请查找重做日志的尾部。

  • 阶段5.  数据节点启动的大部分数据库相关部分在此阶段执行。对于初始启动或系统重新启动,执行本地检查点,然后执行全局检查点。在此阶段开始定期检查内存使用情况,并执行任何必需的节点接管。

  • 阶段6.  在这个阶段,节点组被定义和设置。

  • 阶段7.  仲裁器节点被选中并开始运行。与备份磁盘写入速度一样,设置下一个备份ID。达到此开始阶段的节点标记为 StartedAPI节点(包括SQL节点)现在可以连接到群集。

  • 阶段8.  如果这是系统重新启动,则所有索引都将被重建(按 DBDIH)。

  • 阶段9.  重置节点内部启动变量。

  • 阶段100(OBSOLETE)。  以前,在节点重启或初始节点重启期间,API节点可以连接到该节点并开始接收事件。目前,这个阶段是空的。

  • 阶段101.  此时,在节点重新启动或初始节点重新启动时,将事件传递切换到加入群集的节点。新加入的节点接管将其主要数据传送给订户的责任。这个阶段也被称为 SUMA切换阶段

在初始启动或系统重新启动完成此过程后,将启用事务处理。对于节点重新启动或初始节点重新启动,完成启动过程意味着该节点现在可以充当事务协调器。

21.5.2 NDB集群管理客户端中的命令

除了中央配置文件外,集群还可以通过管理客户端ndb_mgm提供的命令行界面进行控制这是正在运行的群集的主要管理界面。

第21.5.6节“在NDB集群中生成的事件报告” 中给出了事件日志的命令 ; 第21.5.3节“NDB群集的联机备份”中提供了用于创建备份和从中进行恢复的命令

在MySQL Cluster Manager中使用ndb_mgm。  MySQL集群管理器处理启动和停止进程并在内部跟踪其状态,因此对于处于MySQL集群管理器控制下的NDB集群的这些任务没有必要使用 ndb_mgm建议 不要使用 NDB集群分发附带ndb_mgm命令行客户端来执行涉及启动或停止节点的操作。这些措施包括但不限于 STARTSTOPRESTART,和 SHUTDOWN命令。有关更多信息,请参阅MySQL Cluster Manager进程命令

管理客户端具有以下基本命令。在下面的列表中,node_id表示数据节点ID或关键字ALL,表示该命令应该应用于所有集群的数据节点。

  • HELP

    显示所有可用命令的信息。

  • CONNECT connection-string

    连接到由连接字符串指示的管理服务器。如果客户端已连接到此服务器,则客户端重新连接。

  • SHOW

    显示有关群集状态的信息。可能的节点状态值包括UNKNOWNNO_CONTACTNOT_STARTEDSTARTINGSTARTEDSHUTTING_DOWN,和 RESTARTING此命令的输出还指示群集何时处于单用户模式(状态 SINGLE USER MODE)。

  • node_id START

    在线提供由node_id(或所有数据节点)标识的 数据节点。

    ALL START 仅适用于所有数据节点,并且不会影响管理节点。

    重要

    要使用此命令使数据节点联机,数据节点必须已使用--nostart开始使用 -n

  • node_id STOP [-a] [-f]

    停止由标识的数据或管理节点 node_id

    注意

    ALL STOP 仅用于停止所有数据节点,并且不会影响管理节点。

    受该命令影响的节点与群集断开连接,并且其关联的ndbdndb_mgmd进程终止。

    -a选项使节点立即停止,而不用等待任何未决事务的完成。

    通常,STOP如果结果会导致不完整的群集,则会失败。-f选项强制节点关闭而不检查此操作。如果使用此选项且结果是不完整的群集,则群集将立即关闭。

    警告

    使用该-a选项也会禁用安全检查,否则在STOP调用执行安全检查, 以确保停止节点不会导致不完整的群集。换句话说,-aSTOP 命令使用该选项时应该格外小心 ,因为该选项使群集可以进行强制关闭,因为它不再拥有存储在其中的所有数据的完整副本 NDB

  • node_id RESTART [-n] [-i] [-a] [-f]

    重新启动由node_id(或所有数据节点)标识的 数据节点。

    使用-i选项with RESTART使数据节点执行初始重新启动; 也就是说,该节点的文件系统被删除并重新创建。效果与从停止数据节点进程获得的效果相同,然后使用系统shell中的ndbd 重新启动它--initial

    注意

    使用此选项时,不会删除备份文件和磁盘数据文件。

    使用该-n选项会导致数据节点进程重新启动,但在START发出相应的命令之前,数据节点并未实际联机 此选项的效果与停止数据节点并使用系统shell中的ndbd --nostartndbd 再次启动它相同 -n

    使用-a原因导致所有当前依赖此节点的事务中止。当节点重新加入群集时,不会执行GCP检查。

    通常情况下,RESTART如果将节点脱机会导致集群不完整,则会失败。-f选项强制节点重新启动而不检查此操作。如果使用此选项且结果是不完整的群集,则整个群集都会重新启动。

  • node_id STATUS

    显示由node_id(或所有数据节点)标识的数据节点的状态信息

    此命令的输出还指示群集何时处于单用户模式。

  • node_id REPORT report-type

    显示report-type由所标识的数据节点node_id或所有数据节点使用的报告类型 ALL

    目前,有三种可接受的值 report-type

    • BackupStatus 提供正在进行的群集备份的状态报告

    • MemoryUsage 显示每个数据节点正在使用多少数据内存和索引内存,如下例所示:

      ndb_mgm> ALL REPORT MEMORY
      
      节点1:数据使用率为5%(总共3200页共177页32K页)
      节点1:索引使用率为0%(总共12832个108 8K页)
      节点2:数据使用率为5%(共3232页共177页32K页)
      节点2:索引使用率为0%(总共12832个108 8K页)
      

      该信息也可从 ndbinfo.memoryusage 表中获得。

    • EventLog 报告来自一个或多个数据节点的事件日志缓冲区的事件。

    report-type是不区分大小写和 模糊 ”的 ; 因为MemoryUsage,您可以使用MEMORY(如前面的示例所示),memory甚至可以简单地使用 MEM(或mem)。你可以BackupStatus用类似的方式缩写

  • ENTER SINGLE USER MODE node_id

    进入单用户模式,只有由节点ID标识的MySQL服务器才被node_id 允许访问数据库。

    目前,数据节点在单用户模式下运行时无法加入NDB集群。(错误#20395)

  • EXIT SINGLE USER MODE

    退出单用户模式,启用所有SQL节点(即所有正在运行的mysqld进程)来访问数据库。

    注意

    EXIT SINGLE USER MODE即使不在单用户模式下 也可以使用,但在这种情况下该命令不起作用。

  • QUITEXIT

    终止管理客户端。

    此命令不会影响连接到群集的任何节点。

  • SHUTDOWN

    关闭所有群集数据节点和管理节点。在完成后退出管理客户端,使用 EXITQUIT

    该命令没有关闭连接到群集的任何SQL节点或API的节点。

  • CREATE NODEGROUP nodeid[, nodeid, ...]

    创建一个新的NDB群集节点组,并导致数据节点加入它。

    在将新数据节点在线添加到NDB群集后使用此命令,并使它们加入新节点组,从而开始充分参与群集。该命令以逗号分隔的节点ID列表作为其唯一参数 - 这些是刚刚添加和启动的要加入新节点组的节点的ID。节点数量必须与已经是群集一部分的每个节点组中的节点数量相同(每个NDB群集节点组必须具有相同数量的节点)。换句话说,如果NDB群集有2个节点组,每个节点组有2个数据节点,那么新节点组必须也有2个数据节点。

    自动确定由该命令创建的新节点组的节点组ID,并始终为集群中次最高的未使用节点组ID; 无法手动设置。

    有关更多信息,请参见 第21.5.14节“在线添加NDB群集数据节点”

  • DROP NODEGROUP nodegroup_id

    删除给定的NDB群集节点组 nodegroup_id

    该命令可用于从NDB群集中删除节点组。DROP NODEGROUP将作为其唯一参数的要被删除的节点组的节点组ID。

    DROP NODEGROUP仅用于从该节点组中删除受影响的节点组中的数据节点。它不会停止数据节点,将它们分配给不同的节点组,或将它们从群集的配置中删除。不属于节点组的数据节点在管理客户端SHOW命令的输出 中用 no nodegroup代替节点组ID的方式指示,如下所示(使用粗体文本表示):

    id = 3 @ 10.100.2.67(5.7.22-ndb-7.5.11,no nodegroup 

    DROP NODEGROUP仅当要删除的节点组中的所有数据节点完全没有任何表数据和表定义时才起作用。由于目前没有办法使用ndb_mgmmysql客户端从特定数据节点或节点组中删除所有数据,这意味着命令只能在以下两种情况下成功:

    1. 发行后CREATE NODEGROUPndb_mgm 客户端,但在此之前发出任何 ALTER TABLE ... REORGANIZE PARTITION语句中的 MySQL的客户端。

    2. 删除所有NDBCLUSTER 表后使用DROP TABLE

      TRUNCATE TABLE不适用于此目的,因为这只会删除表格数据; 数据节点继续存储 NDBCLUSTER表的定义,直到DROP TABLE发出导致表元数据被删除语句。

    有关更多信息DROP NODEGROUP,请参见第21.5.14节“在线添加NDB群集数据节点”

  • PROMPT [prompt]

    ndb_mgm显示的提示更改为字符串文字prompt

    prompt不应该被引用(除非你希望提示包括引号)。mysql客户端的情况不同,特殊字符序列和转义不被识别。如果没有参数调用,该命令会将提示重置为默认值(ndb_mgm>)。

    这里显示了一些示例:

    ndb_mgm> PROMPT mgm#1:
    mgm#1:SHOW
    群集配置
    ...PROMPT mymgm >
    mgm 
    #1:mymgm> PROMPT 'mymgm:'
    'mymgm:' PROMPT  mymgm:
    mymgm:PROMPT
    ndb_mgm>EXIT
    乔恩@ valhaj:〜/ bin中>
    

    请注意,prompt字符串中的前导空格和空格 不会被修剪。尾随空格被删除。

    PROMPT命令添加到NDB 7.5.0中。

  • node_id NODELOG DEBUG {ON|OFF}

    在节点日志中切换调试日志记录,就像受影响的数据节点或节点已使用该--verbose选项启动一样 NODELOG DEBUG ON开始调试日志; NODELOG DEBUG OFF关闭调试注销。

    该命令已添加到NDB 7.6.4中。

其他命令。 ndb_mgm客户端中可用的许多其他命令在 其他地方进行了介绍,如下面的列表所示:

21.5.3 NDB集群的在线备份

接下来的几节将介绍如何使用ndb_mgm管理客户端中的此功能来准备并创建NDB群集备份为了将这种类型的备份与使用mysqldump创建的备份区分开来 ,我们有时会将其称为 本机 NDB群集备份。(有关使用mysqldump创建备份的信息,请参见 第4.5.4节“ mysqldump - 数据库备份程序”。)NDB集群备份的恢复使用随NDB集群分布提供ndb_restore实用程序完成; 有关信息 ndb_restore及其在恢复NDB群集备份中的使用,请参见 第21.4.24节“ ndb_restore - 恢复NDB群集备份”

21.5.3.1 NDB群集备份概念

备份是给定时间的数据库快照。备份由三个主要部分组成:

  • 元数据。  所有数据库表的名称和定义

  • 表记录。  在备份时实际存储在数据库表中的数据

  • 事务日志。  一个连续的记录,告诉数据如何以及何时存储在数据库中

每个部分都保存在参与备份的所有节点上。在备份期间,每个节点将这三部分保存到磁盘上的三个文件中:

  • BACKUP-backup_id.node_id.ctl

    包含控制信息和元数据的控制文件。每个节点将相同的表定义(针对集群中的所有表)保存到其自己的该文件版本中。

  • BACKUP-backup_id-0.node_id.data

    包含表格记录的数据文件,这些文件以每个片段为基础保存。也就是说,不同的节点在备份过程中保存不同的片段。每个节点保存的文件都以一个标题开始,标题指出了记录所属的表。在记录列表后面有一个包含所有记录校验和的页脚。

  • BACKUP-backup_id.node_id.log

    包含已提交事务记录的日志文件。只有备份中存储的表上的事务才会存储在日志中。涉及备份的节点保存不同的记录,因为不同的节点承载不同的数据库片段。

在刚才显示的列表中,backup_id 代表备份标识符,并且 node_id是创建该文件的节点的唯一标识符。

备份文件的位置由BackupDataDir参数确定

21.5.3.2使用NDB集群管理客户端创建备份

在开始备份之前,请确保已正确配置群集以执行备份。(请参见 第21.5.3.3节“NDB群集备份的配置”。)

START BACKUP命令用于创建备份:

开始备份[ backup_id] [ wait_option] [ snapshot_option]

wait_option
等待{开始| COMPLETED} | NOWAIT

snapshot_option
SNAPSHOTSTART | SNAPSHOTEND

连续备份会自动按顺序识别,因此backup_id,大于或等于1的整数是可选的; 如果省略,则使用下一个可用值。如果使用现有 backup_id值,备份将失败并显示错误备份失败:文件已存在如果使用, backup_id必须START BACKUP立即使用,然后再使用其他选项。

所述wait_option可用于确定何时控制返回给管理客户端一个后START BACKUP发出命令,如示于下列表中:

  • 如果NOWAIT指定,管理客户端会立即显示提示,如下所示:

    ndb_mgm> START BACKUP NOWAIT
    ndb_mgm>
    

    在这种情况下,管理客户端即使在从备份过程打印进度信息时也可以使用。

  • 随着WAIT STARTED管理客户端等待,直到备份控制权返回给用户之前开始,如下所示:

    ndb_mgm> START BACKUP WAIT STARTED
    等待开始,这可能需要几分钟的时间
    节点2:备份3从节点1开始
    ndb_mgm>
    
  • WAIT COMPLETED 导致管理客户端等待备份过程完成,然后再将控制权交还给用户。

WAIT COMPLETED 是默认值。

snapshot_option可以使用 A 来确定备份是否与START BACKUP发布时的群集状态相匹配,或者是否与完成时的状态相匹配SNAPSHOTSTART使备份与备份开始时的群集状态相匹配; SNAPSHOTEND导致备份在备份完成时反映群集的状态。 SNAPSHOTEND是默认值,并与先前的NDB群集版本中找到的行为相匹配。

注意

如果您使用该SNAPSHOTSTART选项 START BACKUP,并且CompressedBackup 启用参数,则只有数据和控制文件被压缩 - 日志文件未压缩。

如果同时使用a wait_option和a snapshot_option,则可以按任意顺序指定它们。例如,以下所有命令都是有效的,假设没有现有的备份,其ID为4:

开始备份等待启动SNAPSHOTSTART
开始备份SNAPSHOTSTART等待开始
开始备份4等待完成的快照
开始备份SNAPSHOTEND等待已完成
开始备份4 NOWAIT SNAPSHOTSTART

创建备份的过程包含以下步骤:

  1. 如果它尚未运行, 启动管理客户端(ndb_mgm)。

  2. 执行该START BACKUP命令。这会产生几行输出,指示备份的进度,如下所示:

    ndb_mgm> START BACKUP
    等待完成,这可能需要几分钟的时间
    节点2:备份1从节点1开始
    节点2:从节点1开始的备份1已完成
     StartGCP:177 StopGCP:180
     #Records:7362 #LogRecords:0
     数据:453648字节日志:0字节
    ndb_mgm>
    
  3. 备份启动后,管理客户端显示以下消息:

    备份backup_id从节点开始node_id
    

    backup_id是此特定备份的唯一标识符。如果尚未配置其他标识符,该标识符将保存在群集日志中。node_id是协调备份与数据节点的管理服务器的标识符。此时在备份过程中,群集已收到并处理了备份请求。这并不意味着备份已完成。此处显示此语句的一个示例:

    节点2:备份1从节点1开始
    
  4. 管理客户端用这样的消息指示备份已经开始:

    备份backup_id从节点node_id完成
     开始

    正如通知备份已启动的情况一样,backup_id此特定备份的唯一标识符 node_id是管理服务器的节点ID,该服务器正在协调备份与数据节点。该输出还附带了其他信息,包括相关的全局检查点,备份的记录数量和数据大小,如下所示:

    节点2:从节点1开始的备份1已完成
     StartGCP:177 StopGCP:180
     #Records:7362 #LogRecords:0
     数据:453648字节日志:0字节
    

也可以通过使用 or 选项调用ndb_mgm来从系统shell执行备份,如以下示例所示: -e--execute

外壳> ndb_mgm -e "START BACKUP 6 WAIT COMPLETED SNAPSHOTSTART"

START BACKUP以这种方式 使用时,您必须指定备份标识。

群集备份默认情况下在每个数据节点BACKUP子目录 中创建 DataDir这可以针对一个或多个数据节点单独进行覆盖,也可以config.ini使用BackupDataDir 配置参数文件 中的所有群集数据节点进行覆盖 为给定备份创建的备份文件backup_id存储在 备份目录中指定的子目录 中。 BACKUP-backup_id

取消备份。  要取消或中止正在进行的备份,请执行以下步骤:

  1. 启动管理客户端。

  2. 执行此命令:

    ndb_mgm> ABORT BACKUP backup_id
    

    该编号backup_id是在启动备份时(在消息中包含在管理客户端的响应中的备份的标识Backup backup_id started from node management_node_id

  3. 管理客户端将用确认中止请求Abort of backup backup_id ordered

    注意

    此时,管理客户端尚未收到群集数据节点对此请求的响应,并且备份尚未实际中止。

  4. 备份中止后,管理客户端将以类似于此处显示的方式报告此事实:

    节点1:从5开始的备份3已被中止。
      错误:1321  - 备份由用户请求中止:永久错误:用户定义的错误
    节点3:从5开始的备份3已被中止。
      错误:1323  -  1323:永久错误:内部错误
    节点2:从5开始的备份3已被中止。
      错误:1323  -  1323:永久错误:内部错误
    节点4:从5开始的备份3已被中止。
      错误:1323  -  1323:永久错误:内部错误
    

    在本例中,我们已经显示了具有4个数据节点的集群的示例输出,其中要中止的备份的序列号是3,并且集群管理客户端连接到的管理节点具有节点ID 5完成其中止部分备份的第一个节点报告中止的原因是由于用户的请求。(其余节点报告由于未指定的内部错误导致备份中止。)

    注意

    不保证群集节点以ABORT BACKUP任何特定顺序响应 命令。

    这些消息表示备份已终止,并且与此备份相关的所有文件已从群集文件系统中删除。 Backup backup_id started from node management_node_id has been aborted

也可以使用此命令从系统shell放弃正在进行的备份:

外壳> ndb_mgm -e "ABORT BACKUP backup_id"
注意

如果没有备份的ID在 backup_id运行时 ABORT BACKUP发出,管理客户端没有响应,也没有在群集日志中指示发送了无效的中止命令。

21.5.3.3 NDB群集备份的配置

五个配置参数对于备份至关重要:

  • BackupDataBufferSize

    在将数据写入磁盘之前用于缓冲数据的内存量。

  • BackupLogBufferSize

    在将日志记录写入磁盘之前用于缓冲日志记录的内存量。

  • BackupMemory

    数据节点中分配的总内存用于备份。这应该是为备份数据缓冲区和备份日志缓冲区分配的内存的总和。

  • BackupWriteSize

    写入磁盘的块的默认大小。这适用于备份数据缓冲区和备份日志缓冲区。

  • BackupMaxWriteSize

    写入磁盘的块的最大大小。这适用于备份数据缓冲区和备份日志缓冲区。

有关这些参数的更多详细信息可以在备份参数中找到

您还可以使用BackupDataDir 配置参数设置备份文件的位置 默认是 FileSystemPath/BACKUP/BACKUP-backup_id

21.5.3.4 NDB群集备份故障排除

如果在发出备份请求时返回错误代码,最可能的原因是内存或磁盘空间不足。您应该检查是否有足够的内存分配给备份。

重要

如果你已经设定 BackupDataBufferSize 并且 BackupLogBufferSize 总和大于4MB,那么你也必须设定 BackupMemory好。

您还应该确保备份目标的硬盘驱动器分区上有足够的空间。

NDB不支持可重复读取,这可能会导致恢复过程出现问题。虽然备份过程是,但从备份恢复NDB群集不是100% 过程。这是由于以下事实:在还原过程中,正在运行的事务从还原的数据中获取不可重复的读取。这意味着恢复过程中数据的状态不一致。

21.5.4 NDB集群的MySQL服务器使用情况

mysqld是传统的MySQL服务器进程。为了与NDB集群一起使用,需要使用对 存储引擎的支持来构建 mysqldNDB,因为它位于可从http://dev.mysql.com/downloads/获得的预编译二进制文件中如果你从源代码编译MySQL,你必须调用 CMake的-DWITH_NDBCLUSTER=1包括支持选项NDB

有关从源编译NDB集群的更多信息,请参见 第21.2.2.4节“从Linux上的Source构建NDB集群”第21.2.3.2节“从Windows上的Source编译和安装NDB集群”

(有关mysqld选项和变量的信息,除了本节讨论的与NDB集群有关的内容外,请参见 第21.3.3.9节“用于NDB集群的MySQL服务器选项和变量”。)

如果mysqld二进制文件已经使用集群支持构建,则NDBCLUSTER 存储引擎默认仍处于禁用状态。您可以使用以下两种可能的选项之一来启用此引擎:

  • 使用--ndbcluster开始时作为命令行启动选项 的mysqld

  • ndbcluster文件[mysqld]部分 插入一行my.cnf

验证服务器是否在NDBCLUSTER启用存储引擎的情况下运行的简单方法 SHOW ENGINES在MySQL Monitor(mysql)中发布该语句您应该将该值YES看作Support 行中NDBCLUSTER如果你NO在这一行看到,或者输出中没有显示这样的行,那么你没有运行NDBMySQL 启用版本。如果你DISABLED在这一行看到,你需要使用刚刚描述的两种方法之一来启用它。

要读取群集配置数据,MySQL服务器至少需要三条信息:

  • MySQL服务器自己的群集节点ID

  • 管理服务器(MGM节点)的主机名或IP地址

  • 它可以连接到管理服务器的TCP / IP端口号

节点ID可以动态分配,因此不需要明确指定它们。

所述mysqld的参数 ndb-connectstring被用来启动时要么指定命令行上的连接字符串 的mysqldmy.cnf连接字符串包含可以找到管理服务器的主机名或IP地址,以及它使用的TCP / IP端口。

在以下示例中,ndb_mgmd.mysql.com是管理服务器所在的主机,管理服务器在端口1186上侦听群集消息:

外壳> mysqld --ndbcluster --ndb-connectstring=ndb_mgmd.mysql.com:1186

有关连接字符串的更多信息,请参见第21.3.3.3节“NDB群集连接字符串”

根据这些信息,MySQL服务器将成为群集中的完全参与者。(我们经常将以这种方式运行mysqld进程称为SQL节点。)它将完全知道所有集群数据节点及其状态,并将建立与所有数据节点的连接。在这种情况下,它可以使用任何数据节点作为事务协调器并读取和更新节点数据。

你可以在mysql客户端看到MySQL服务器是否连接到使用的集群SHOW PROCESSLIST如果MySQL服务器连接到集群,并且您有PROCESS 权限,那么输出的第一行如下所示:

mysql> SHOW PROCESSLIST \ G
*************************** 1. row ******************** *******
     Id:1
   用户:系统用户
   主办:
     D b:
命令:守护进程
   时间:1
  状态:正在等待来自ndbcluster的事件
   信息:NULL
重要

参加一个NDB集群中,mysqld的 进程必须启动两个选项--ndbcluster--ndb-connectstring(或它们的等价物my.cnf)。如果 仅使用该选项启动 mysqld--ndbcluster,或者无法联系集群,则无法使用 NDB表,也无法创建任何新表,无论存储引擎如何后一种限制是旨在防止创建具有相同名称的表的安全措施NDB而SQL节点未连接到群集。如果您希望在mysqld 进程未加入NDB集群的情况下使用不同的存储引擎创建表,则必须重新启动服务器而不使用--ndbcluster选项。

21.5.5执行NDB群集的滚动重启

本节讨论如何执行NDB群集安装滚动重新启动(所谓的),因为它涉及依次停止和启动(或重新启动)每个节点,以便群集本身保持运行。这通常是作为滚动升级滚动降级的一部分完成 的,群集的高可用性是强制性的,并且不允许整个群集的停机时间。在我们提及升级的地方,这里提供的信息通常也适用于降级。

滚动重启可能需要的原因有很多。这些在接下来的几段中描述。

配置更改。  要更改群集的配置,例如将SQL节点添加到群集,或将配置参数设置为新值。

NDB集群软件升级或降级。  将群集升级到较新版本的NDB群集软件(或将其降级为较旧版本)。这通常被称为滚动升级(或 滚动降级,当恢复到旧版本的NDB群集时)。

在节点主机上更改。  在运行一个或多个NDB群集节点进程的硬件或操作系统中进行更改。

系统重置(群集重置)。  重置群集,因为它已达到不需要的状态。在这种情况下,通常需要重新加载一个或多个数据节点的数据和元数据。这可以通过三种方法中的任何一种来完成:

资源恢复。  通过连续操作INSERTDELETE操作释放先前分配给表的内存 ,以供其他NDB簇表重新使用。

执行滚动重启的过程可以概括如下:

  1. 停止所有群集管理节点(ndb_mgmd 进程),重新配置它们,然后重新启动它们。(请参阅 滚动使用多个管理服务器重新启动。)

  2. 停止,重新配置,然后依次重新启动每个群集数据节点(ndbd进程)。

    一些节点配置参数可以通过在前一步骤之后针对ndb_mgm客户端RESTART中的每个数据节点发布来更新 ; 其他则需要使用shell命令(如大多数Unix系统上的kill)或管理客户机 命令完全停止数据节点 ,然后通过 适当调用ndbdndbmtd可执行文件再次从系统shell启动STOP

    注意

    在Windows上,还可以使用系统NET STOPNET START命令或Windows服务管理器来停止和启动已作为Windows服务安装的节点(请参见 第21.2.3.4节“将NDB群集进程安装为Windows服务”)。

    所需的重新启动类型在文档中针对每个节点配置参数进行指示。请参见 第21.3.3节“NDB群集配置文件”

  3. 停止,重新配置,然后依次重新启动每个群集SQL节点(mysqld进程)。

NDB集群支持升级节点的灵活顺序。升级NDB群集时,可以在升级管理节点,数据节点或两者之前升级API节点(包括SQL节点)。换句话说,您可以按任意顺序升级API和SQL节点。这受限于以下规定:

  • 此功能仅用作在线升级的一部分。来自不同NDB集群版本的节点二进制文件混合既不打算也不支持在生产环境中连续长期使用。

  • 任何数据节点升级之前,必须升级所有管理节点。无论您升级群集的API和SQL节点的顺序如何,这仍然是正确的。

  • 在所有管理节点和数据节点都升级之前,不得使用 特定于版本的功能

    这也适用于除了NDB引擎版本更改之外可能适用的任何MySQL服务器版本更改,因此在规划升级时不要忘记考虑这一点。(对于NDB群集的在线升级通常是这样。)

参见Bug#48528和Bug#49163。

注意

任何API节点都不可能在节点重新启动期间执行模式操作(例如数据定义语句)。

滚动重新启动多个管理服务器。  在执行具有多个管理节点的NDB群集的滚动重新启动时,请记住 ndb_mgmd将检查是否有其他管理节点正在运行,如果是,则尝试使用该节点的配置数据。为防止发生这种情况,并强制ndb_mgmd重新读取其配置文件,请执行以下步骤:

  1. 停止所有NDB集群ndb_mgmd进程。

  2. 更新所有config.ini文件。

  3. 根据需要使用 或两个选项 启动一个ndb_mgmd--reload--initial

  4. 如果您使用该选项启动了第一个ndb_mgmd,则 --initial还必须使用其他启动ndb_mgmd进程--initial

    无论启动第一个ndb_mgmd时使用的其他选项如何 ,您都不应在第一个ndb_mgmd进程使用后启动任何其余的ndb_mgmd进程--reload

  5. 正常情况下完成数据节点和API节点的滚动重新启动。

执行滚动重新启动以更新群集的配置时,可以使用表中config_generationndbinfo.nodes来跟踪哪些数据节点已成功地用新配置重新启动。请参见 第21.5.10.28节“ndbinfo节点表”

21.5.6在NDB集群中生成的事件报告

在本节中,我们将讨论NDB集群提供的事件日志类型以及记录的事件类型。

NDB群集提供两种类型的事件日志:

  • 群集日志,其包括所有群集节点生成的事件。群集日志是为大多数用途推荐的日志,因为它为单个位置中的整个群集提供日志信息。

    默认情况下,群集日志将保存到管理服务器中名为 ((其中是管理服务器的节点ID))的文件中 ndb_node_id_cluster.lognode_idDataDir

    群集日志记录信息也可以发送到 stdoutsyslog 保存到一个文件中,或者保存到一个文件中,这取决于为DataDirLogDestination 配置参数设置的值 有关这些参数的更多信息请参见 第21.3.3.5节“定义NDB群集管理服务器”

  • 节点日志对每个节点都是本地的。

    由节点事件记录生成的输出写入节点的文件 (其中是节点的节点ID) 节点事件日志是为管理节点和数据节点生成的。 ndb_node_id_out.lognode_idDataDir

    节点日志只能在应用程序开发期间使用,或者用于调试应用程序代码。

这两种类型的事件日志都可以设置为记录不同的事件子集。

每个可报告事件可根据三个不同的标准进行区分:

  • 类别:这可以是以下值中的任何一个:STARTUPSHUTDOWNSTATISTICSCHECKPOINTNODERESTARTCONNECTIONERROR,或 INFO

  • 优先级:这由0到15之间的一个数字表示,其中0表示 最重要和15最不重要。

  • 严重级别:这可以是下列任一值:ALERTCRITICALERRORWARNINGINFO,或 DEBUG

可以在这些属性上过滤群集日志和节点日志。

集群日志中使用的格式如下所示:

2007-01-26 19:35:55 [MgmSrvr]信息 - 节点1:数据使用率为2%(总共2560个60个32K页)
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点1:索引使用率为1%(总共2336个24 8K页)
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点1:资源0分钟:0最大值:639 curr:0
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点2:数据使用率为2%(总共2560个76个32K页)
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点2:索引使用率为1%(总共2336个24 8K页)
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点2:资源0分钟:0最大值:639当前值:0
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点3:数据使用率为2%(总共2560个58个32K页)
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点3:索引使用率为1%(总共2336个25 8K页)
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点3:资源0分钟:0最大值:639当前值:0
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点4:数据使用率为2%(总共2560个页面共74个32K页面)
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点4:索引使用率为1%(总共2336个25 8K页)
2007-01-26 19:35:55 [MgmSrvr]信息 - 节点4:资源0分钟:0最大值:639当前值:0
2007-01-26 19:39:42 [MgmSrvr]信息 - 节点4:节点9已连接
2007-01-26 19:39:42 [MgmSrvr]信息 - 节点1:节点9已连接
2007-01-26 19:39:42 [MgmSrvr]信息 - 节点1:节点9:API 5.7.22-ndb-7.5.11
2007-01-26 19:39:42 [MgmSrvr]信息 - 节点2:节点9已连接
2007-01-26 19:39:42 [MgmSrvr]信息 - 节点2:节点9:API 5.7.22-ndb-7.5.11
2007-01-26 19:39:42 [MgmSrvr]信息 - 节点3:节点9已连接
2007-01-26 19:39:42 [MgmSrvr]信息 - 节点3:节点9:API 5.7.22-ndb-7.5.11
2007-01-26 19:39:42 [MgmSrvr]信息 - 节点4:节点9:API 5.7.22-ndb-7.5.11
2007-01-26 19:59:22 [MgmSrvr] ALERT  - 节点2:节点7断开连接
2007-01-26 19:59:22 [MgmSrvr] ALERT  - 节点2:节点7断开连接

群集日志中的每一行都包含以下信息:

  • 格式中 的时间戳 YYYY-MM-DD HH:MM:SS

  • 正在执行日志记录的节点的类型。在集群日志中,这总是[MgmSrvr]

  • 事件的严重程度。

  • 报告事件的节点的ID。

  • 事件的描述。在日志中出现的最常见类型的事件是集群中不同节点之间的连接和断开,以及检查点何时发生。在某些情况下,描述可能包含状态信息。

21.5.6.1 NDB集群日志记录管理命令

ndb_mgm支持许多与群集日志和节点日志相关的管理命令。在下面的列表中,node_id表示存储节点ID或关键字ALL,表示该命令应该应用于所有集群的数据节点。

  • CLUSTERLOG ON

    打开集群登录。

  • CLUSTERLOG OFF

    关闭群集日志。

  • CLUSTERLOG INFO

    提供有关群集日志设置的信息。

  • node_id CLUSTERLOG category=threshold

    日志category优先级小于或等于事件 threshold在群集日志。

  • CLUSTERLOG FILTER severity_level

    切换指定事件的集群日志记录 severity_level

下表介绍了群集日志类别阈值的默认设置(针对所有数据节点)。如果事件的优先级值低于或等于优先级阈值,则会在群集日志中报告。

注意

每个数据节点都会报告事件,并且可以在不同节点上将阈值设置为不同的值。

表21.335集群日志类别,默认阈值设置

类别 默认阈值(所有数据节点)
STARTUP 7
SHUTDOWN 7
STATISTICS 7
CHECKPOINT 7
NODERESTART 7
CONNECTION 7
ERROR 15
INFO 7

STATISTICS类别可以提供大量有用的数据。有关更多信息请参见 第21.5.6.3节“在NDB集群管理客户端中使用CLUSTERLOG统计信息”。

阈值用于过滤每个类别中的事件。例如,STARTUP除非将阈值STARTUP设置为3或更高,否则不记录优先级为3 事件 如果阈值为3,则仅发送优先级为3或更低的事件。

下表显示事件严重性级别。

注意

这些对应于Unix syslog级别,除了LOG_EMERGLOG_NOTICE,没有使用或映射。

表21.336事件严重性级别

严重级别值 严重 描述
1 ALERT 应立即纠正的情况,例如损坏的系统数据库
2 CRITICAL 关键条件,例如设备错误或资源不足
3 ERROR 应该纠正的条件,例如配置错误
4 WARNING 条件不是错误,但可能需要特殊处理
INFO 信息消息
6 DEBUG 调试用于NDBCLUSTER 开发的消息

事件严重性级别可以打开或关闭(使用 CLUSTERLOG FILTER参见上文)。如果启用了严重性级别,则会记录所有优先级小于或等于类别阈值的事件。如果关闭严重性级别,则不会记录属于该严重性级别的事件。

重要

集群日志级别在每个用户的基础上设置为每个 ndb_mgmd这意味着,在具有多个管理服务器的NDB群集中,CLUSTERLOG连接到一个管理服务器ndb_mgm实例中使用命令只会影响该管理服务器生成的日志,而不影响其他任何管理服务器生成的日志。这也意味着,如果其中一个管理服务器重新启动,则只有该管理服务器生成的日志会受到重新启动导致的日志级别重置的影响。

21.5.6.2 NDB集群日志事件

事件日志中报告的事件报告具有以下格式:

datetime[ string] severity-message

例如:

09:19:30 2005-07-24 [NDB] INFO  - 节点4启动阶段4完成

本节讨论所有可报告的事件,按类别和严重程度在每个类别内排序。

在事件描述中,GCP和LCP分别表示全局检查点本地检查点

CONNECTION事件

这些事件与群集节点之间的连接相关联。

表21.337与群集节点之间的连接相关的事件

事件 优先 严重级别 描述
Connected 8 INFO 数据节点已连接
Disconnected 8 ALERT 数据节点断开
CommunicationClosed 8 INFO SQL节点或数据节点连接关闭
CommunicationOpened 8 INFO SQL节点或数据节点连接已打开
ConnectedApiVersion 8 INFO 使用API​​版本进行连接

CHECKPOINT事件

此处显示的日志消息与检查点相关联。

表21.338与检查点相关的事件

事件 优先 严重级别 描述
GlobalCheckpointStarted 9 INFO GCP开始:重做日志被写入磁盘
GlobalCheckpointCompleted 10 INFO GCP完成
LocalCheckpointStarted 7 INFO LCP开始:写入磁盘的数据
LocalCheckpointCompleted 7 INFO LCP正常完成
LCPStoppedInCalcKeepGci 0 ALERT LCP停止
LCPFragmentCompleted 11 INFO 片段上的LCP已经完成
UndoLogBlocked 7 INFO UNDO伐木受阻; 缓冲区溢出附近
RedoStatus 7 INFO 重做状态

STARTUP事件

响应于节点或群集的启动以及其成功或失败而生成以下事件。他们还提供有关启动过程进展的信息,包括有关伐木活动的信息。

表21.339与启动节点或群集相关的事件

事件 优先 严重级别 描述
NDBStartStarted 1 INFO 数据节点启动阶段启动(所有节点启动)
NDBStartCompleted 1 INFO 开始阶段完成后,所有数据节点
STTORRYRecieved 15 INFO 重启完成后收到块
StartPhaseCompleted 4 INFO 数据节点启动阶段X完成
CM_REGCONF 3 INFO 节点已成功包含到群集中; 显示节点,管理节点和动态ID
CM_REGREF 8 INFO 节点已被拒绝列入集群; 由于配置错误,无法建立通信或其他问题而无法包含在群集中
FIND_NEIGHBOURS 8 INFO 显示相邻的数据节点
NDBStopStarted 1 INFO 数据节点关闭已启动
NDBStopCompleted 1 INFO 数据节点关闭完成
NDBStopForced 1 ALERT 强制关闭数据节点
NDBStopAborted 1 INFO 无法正常关闭数据节点
StartREDOLog 4 INFO 新的重做日志开始; GCI保持X最新的GCIY
StartLog 10 INFO 新的日志开始; 记录部分X,启动MB Y,停止MB Z
UNDORecordsExecuted 15 INFO 撤消记录执行
StartReport 4 INFO 报告开始
LogFileInitStatus 7 INFO 日志文件初始化状态
LogFileInitCompStatus 7 INFO 日志文件完成状态
StartReadLCP 10 INFO 开始阅读本地检查点
ReadLCPComplete 10 INFO 读完本地检查点
RunRedo 8 INFO 运行重做日志
RebuildIndex 10 INFO 重建索引

NODERESTART活动

重新启动节点时会生成以下事件,并与节点重新启动过程的成功或失败有关。

表21.340与重新启动节点相关的事件

事件 优先 严重级别 描述
NR_CopyDict 7 INFO 完成字典信息的复制
NR_CopyDistr 7 INFO 完成复制分配信息
NR_CopyFragsStarted 7 INFO 开始复制碎片
NR_CopyFragDone 10 INFO 完成复制片段
NR_CopyFragsCompleted 7 INFO 完成复制所有片段
NodeFailCompleted 8 ALERT 节点故障阶段完成
NODE_FAILREP 8 ALERT 报告节点失败
ArbitState 6 INFO 报告是否找到仲裁员; 寻求仲裁员时有七种不同的可能结果,列在此处:
  • 管理服务器重新启动仲裁线程[state = X]

  • 准备仲裁节点X [ticket = Y]

  • 接收仲裁节点X [ticket = Y]

  • 开始仲裁节点X [ticket = Y]

  • 丢失仲裁员节点X- 进程失败[state = Y]

  • 丢失的仲裁器节点X- 进程退出[state = Y]

  • 丢失的仲裁器节点X <error msg> [state = Y]

ArbitResult 2 ALERT 报告仲裁员结果; 仲裁尝试有八种不同的可能结果,列在这里:
  • 仲裁检查失败:剩余的节点少于1/2个

  • 仲裁检查成功:节点组占多数

  • 仲裁检查失败:缺少节点组

  • 网络分区:需要仲裁

  • 仲裁成功:来自节点的肯定回应 X

  • 仲裁失败:来自节点的否定响应 X

  • 网络分区:无仲裁器可用

  • 网络分区:未配置仲裁器

GCP_TakeoverStarted 7 INFO GCP收购已经开始
GCP_TakeoverCompleted 7 INFO GCP接管完成
LCP_TakeoverStarted 7 INFO LCP收购开始
LCP_TakeoverCompleted 7 INFO LCP接管完成(州= X
ConnectCheckStarted 6 INFO 连接检查已开始
ConnectCheckCompleted 6 INFO 连接检查完成
NodeFailRejected 6 ALERT 节点失败阶段失败

统计事件

以下事件具有统计性​​质。它们提供的信息包括事务和其他操作的数量,单个节点发送或接收的数据量以及内存使用情况。

表21.341统计性事件

事件 优先 严重级别 描述
TransReportCounters 8 INFO 报告事务统计信息,包括事务数,提交,读取,简单读取,写入,并发操作,属性信息和中止
OperationReportCounters 8 INFO 操作次数
TableCreated 7 INFO 报告创建的表的数量
JobStatistic 9 INFO 平均内部作业调度统计
ThreadConfigLoop 9 INFO 线程配置循环的数量
SendBytesStatistic 9 INFO 发送到节点的平均字节数 X
ReceiveBytesStatistic 9 INFO 从节点接收的平均字节数 X
MemoryUsage INFO 数据和索引内存使用率(80%,90%和100%)
MTSignalStatistics 9 INFO 多线程信号

SCHEMA活动

这些事件与NDB集群模式操作相关。

表21.342与NDB集群模式操作相关的事件

事件 优先 严重级别 描述
CreateSchemaObject 8 INFO Schema反对创建
AlterSchemaObject 8 INFO 架构对象已更新
DropSchemaObject 8 INFO 模式对象被丢弃

错误事件

这些事件与群集错误和警告有关。这些中的一个或多个的存在通常表示发生了重大故障或故障。

表21.343与群集错误和警告相关的事件

事件 优先 严重级别 描述
TransporterError 2 ERROR 运输者错误
TransporterWarning 8 WARNING 运输车警告
MissedHeartbeat 8 WARNING 节点X错过了心跳号码 Y
DeadDueToHeartbeat 8 ALERT 由于错过了心跳,节点X宣布死亡
WarningEvent 2 WARNING 一般警告事件
SubscriptionStatus 4 WARNING 更改订阅状态

信息事件

这些事件提供有关群集状态以及与群集维护相关的活动(如日志记录和心跳传输)的一般信息。

表21.344信息事件

事件 优先 严重级别 描述
SentHeartbeat 12 INFO 发送心跳
CreateLogBytes 11 INFO 创建日志:日志部分,日志文件,大小(以MB为单位)
InfoEvent 2 INFO 一般信息事件
EventBufferStatus 7 INFO 事件缓冲区状态
EventBufferStatus2 7 INFO 改进事件缓冲区状态信息; 添加到NDB 7.5.1中

注意

SentHeartbeat仅当NDB群集已VM_TRACE 启用编译时,事件才可用

SINGLEUSER事件

这些事件与进入和退出单用户模式相关联。

表21.345与单用户模式有关的事件

事件 优先 严重级别 描述
SingleUser 7 INFO 进入或退出单用户模式

备份事件

这些事件提供有关正在创建或还原的备份的信息。

表21.346备份事件

事件 优先 严重级别 描述
BackupStarted 7 INFO 备份开始
BackupStatus 7 INFO 备份状态
BackupCompleted 7 INFO 备份完成
BackupFailedToStart 7 ALERT 备份无法启动
BackupAborted 7 ALERT 备份由用户中止
RestoreStarted 7 INFO 从备份开始恢复
RestoreMetaData 7 INFO 恢复元数据
RestoreData 7 INFO 恢复数据
RestoreLog 7 INFO 恢复日志文件
RestoreCompleted 7 INFO 完成从备份恢复
SavedEvent 7 INFO 事件已保存

21.5.6.3在NDB集群管理客户端中使用CLUSTERLOG STATISTICS

NDB管理客户端的 CLUSTERLOG STATISTICS 命令可以提供许多可在其输出的统计数据。通过事务协调器(TC)和本地查询处理程序(LQH)以5秒的报告间隔更新提供有关群集状态信息的计数器,并将其写入群集日志。

交易协调员统计。  每个事务都有一个事务协调器,可以通过以下方法之一进行选择:

  • 以循环方式

  • 靠通信接近

  • 通过在交易开始时提供数据放置提示

注意

您可以确定使用ndb_optimized_node_selection 系统变量从给定SQL节点启动的事务使用哪种TC选择方法

同一事务中的所有操作都使用相同的事务协调器,该事务协调器报告以下统计信息:

  • 转帐。  这是使用此TC作为交易协调员的最后时间间隔内开始的交易次数。在报告间隔结束时,任何这些交易可能已经提交,已被中止或保持未提交。

    注意

    事务不会在TC之间迁移。

  • 提交计数。  这是使用此TC作为事务协调器在上一个报告间隔内提交的事务数量。由于在此报告间隔中提交的某些事务可能已在之前的报告间隔中启动,因此可能Commit count大于Trans count

  • 读数。  这是使用此TC作为在上一个报告间隔中启动的事务协调器的主键读取操作次数,包括简单读取。此计数还包括作为唯一索引操作的一部分执行的读取。唯一的索引读取操作会生成2个主键读取操作,其中1个用于隐藏唯一索引表,1个用于发生读取的表。

  • 简单的读数。  这是使用此TC作为在上一个报告间隔中启动的事务协调器的简单读取操作的数量。

  • 写数。  这是使用此TC作为在上一个报告间隔中启动的事务协调器的主键写入操作的数量。这包括所有插入,更新,写入和删除,以及作为唯一索引操作的一部分执行的写入。

    注意

    唯一的索引更新操作可以在索引表和基表上生成多个PK读写操作。

  • AttrInfoCount。  这是在使用此TC作为事务协调器的主键操作的上一个报告间隔中接收到的32位数据字的数量。对于读取,这与请求的列数成比例。对于插入和更新,这与写入的列数以及数据的大小成正比。对于删除操作,通常为零。

    唯一的索引操作会生成多个PK操作,因此增加此计数。但是,发送来描述PK操作本身的数据字以及发送的关键信息 计入此处。发送的属性信息用于描述要读取的扫描列或描述ScanFilters的列也不包含在内 AttrInfoCount

  • 并行操作。  这是使用此TC作为事务协调器的主键或扫描操作的数量,这些事务协调器在上次报告间隔期间启动但尚未完成。操作在计数器启动时递增并在完成时递减; 这发生在事务提交之后。脏读和写 - 以及失败的操作 - 递减这个计数器。

    该最大值Concurrent Operations可以具有是操作一个TC块可以支持的最大数量; 目前,这是 (2 * MaxNoOfConcurrentOperations) + 16 + MaxNoOfConcurrentTransactions(有关这些配置参数的更多信息,请参见 第21.3.3.6节“定义NDB群集数据节点”中的“ 事务参数”部分 。)

  • 中止计数。  这是使用此TC作为事务协调器的事务数量,它们在上次报告间隔期间中止。由于在上一个报告间隔中中止的某些事务可能已在先前的报告间隔中开始,Abort count因此有时可能会大于 Trans count

  • 扫描。  这是使用此TC作为上次报告间隔期间启动的事务协调器的表扫描次数。这不包括范围扫描(即,有序索引扫描)。

  • 范围扫描。  这是使用此TC作为在上一个报告间隔中启动的事务协调器的有序索引扫描的数量。

  • 本地读取。  这是在同样包含记录主要副本的节点上使用事务协调器执行的主键读取操作的数量。这个计数也可以从表中LOCAL_READS计数器中获得 ndbinfo.counters

  • 本地写入。  这包含在一个节点上使用事务协调器执行的主键读取操作的数量,该节点也包含记录的主要副本。这个计数也可以从表中LOCAL_WRITES计数器中获得 ndbinfo.counters

本地查询处理程序统计(操作)。  每个本地查询处理程序块有1个集群事件(即每个数据节点进程1个)。操作记录在LQH所在的数据所在的位置。

注意

单个事务可以对存储在多个LQH块中的数据进行操作。

Operations统计提供此LQH块在最后的报告间隔进行本地操作的数量,并包括所有类型的读写操作(插入,更新,写入和删除操作)。这还包括用于复制写入的操作。例如,在2副本群集中,主要副本的写入会记录在主要LQH中,写入备份将记录在备份LQH中。独特的键操作可能会导致多个本地操作; 然而,这并 包括如表扫描或有序索引扫描,这不被计数的结果而产生的局部操作。

进程调度器统计信息。  除了由事务协调器和本地查询处理程序报告的统计信息之外,每个 ndbd进程还有一个调度程序,它还提供与NDB集群性能有关的有用指标。这个调度器运行在一个无限循环中; 在每个循环中,调度程序执行以下任务:

  1. 将来自套接字的任何传入消息读取到作业缓冲区中。

  2. 检查是否有任何定时消息要执行; 如果是的话,也将这些放入作业缓冲区。

  3. 执行(循环)作业缓冲区中的所有消息。

  4. 发送通过在作业缓冲区中执行消息而生成的任何分布式消息。

  5. 等待任何新的传入消息。

进程调度器统计信息包括以下内容:

  • 平均循环计数器。  这是从前面的列表第三步执行的循环数。随着TCP / IP缓冲区利用率的提高,此统计量的规模也随之增加。您可以使用它来在添加新数据节点进程时监视性能的变化。

  • 平均发送大小和平均接收大小。  这些统计信息使您能够评估节点之间的写入和读取效率。这些值以字节为单位给出。较高的值意味着每字节发送或接收的成本较低; 最大值是64K。

要记录所有群集日志统计信息,可以在NDB 管理客户端中使用以下命令

ndb_mgm> ALL CLUSTERLOG STATISTICS=15
注意

将阈值设置为STATISTICS15会导致群集日志变得非常冗长,并且与群集节点的数量和NDB群集中的活动量成正比地增长。

有关与日志和报告相关的NDB集群管理客户端命令的更多信息,请参见 第21.5.6.1节“NDB集群日志管理命令”

21.5.7 NDB集群日志消息

本节包含有关写入群集日志的消息以响应不同群集日志事件的信息。它提供了更多关于NDB运输者错误的更具体的信息

21.5.7.1 NDB群集:群集日志中的消息

下表列出了最常见的 NDB群集日志消息。有关集群日志,日志事件和事件类型的信息,请参见第21.5.6节“在NDB集群中生成的事件报告”这些日志消息也对应于MGM API中的日志事件类型; 有关Cluster API开发人员感兴趣的相关信息,请参阅 Ndb_logevent_type类型

表21.347常见的NDB集群日志消息

日志消息 描述 活动名称 事件类型 优先 严重
Node mgm_node_id: Node data_node_id Connected 具有节点ID的数据节点node_id已连接到管理服务器(节点 mgm_node_id)。 Connected Connection 8 INFO
Node mgm_node_id: Node data_node_id Disconnected 具有节点ID的数据节点data_node_id已与管理服务器(节点mgm_node_id断开连接 Disconnected Connection 8 ALERT
Node data_node_id: Communication to Node api_node_id closed 具有节点ID的API节点或SQL节点 api_node_id不再与数据节点通信 data_node_id CommunicationClosed Connection 8 INFO
Node data_node_id: Communication to Node api_node_id opened 具有节点ID的API节点或SQL节点 api_node_id现在正在与数据节点进行通信 data_node_id CommunicationOpened Connection 8 INFO
Node mgm_node_id: Node api_node_id: API version 具有节点ID的API节点api_node_idmgm_node_id使用 NDBAPI版本 version(通常与MySQL版本号相同)连接到管理节点 ConnectedApiVersion Connection 8 INFO
Node node_id: Global checkpoint gci started 带有ID的全球检查点gci已经启动; 节点node_id是负责这个全局检查点的主人。 GlobalCheckpointStarted Checkpoint 9 INFO
Node node_id: Global checkpoint gci completed 具有该ID的全球检查点gci已经完成; 节点node_id 是负责这个全局检查点的主人。 GlobalCheckpointCompleted Checkpoint 10 INFO
Node node_id: Local checkpoint lcp started. Keep GCI = current_gci oldest restorable GCI = old_gci 具有序列ID的本地检查点lcp 已在节点上启动 node_id可以使用的最新GCI具有索引 current_gci,并且可以从中恢复该群集的最老的GCI具有该索引 old_gci LocalCheckpointStarted Checkpoint 7 INFO
Node node_id: Local checkpoint lcp completed lcp 节点node_id具有序列ID的本地检查点已完成。 LocalCheckpointCompleted Checkpoint 8 INFO
Node node_id: Local Checkpoint stopped in CALCULATED_KEEP_GCI 该节点无法确定最新的可用GCI。 LCPStoppedInCalcKeepGci Checkpoint 0 ALERT
Node node_id: Table ID = table_id, fragment ID = fragment_id has completed LCP on Node node_id maxGciStarted: started_gci maxGciCompleted: completed_gci 表格片段已检查点到节点上的磁盘 node_id正在进行的GCI具有该指数started_gci,最近完成的GCI具有该指数 completed_gci LCPFragmentCompleted Checkpoint 11 INFO
Node node_id: ACC Blocked num_1 and TUP Blocked num_2 times last second 由于日志缓冲区已接近溢出,因此撤销日志记录被阻止。 UndoLogBlocked Checkpoint 7 INFO
Node node_id: Start initiated version 数据节点node_id,正在运行的 NDB版本 version,正在开始其启动过程。 NDBStartStarted StartUp 1 INFO
Node node_id: Started version 数据节点node_id(运行 NDB版本 version)已成功启动。 NDBStartCompleted StartUp 1 INFO
Node node_id: STTORRY received after restart finished 该节点已收到指示集群重新启动已完成的信号。 STTORRYRecieved StartUp 15 INFO
Node node_id: Start phase phase completed (type) 该节点已完成启动阶段phase一的 type开始。有关启动阶段的列表,请参见 第21.5.1节“NDB群集启动阶段摘要”type是的一个 initialsystemnodeinitial node,或<Unknown>。) StartPhaseCompleted StartUp 4 INFO
Node node_id: CM_REGCONF president = president_id, own Node = own_id, our dynamic id = dynamic_id 节点president_id已被选为 总统own_id并且 dynamic_id应始终node_id与报告节点的ID(相同 CM_REGCONF StartUp 3 INFO
Node node_id: CM_REGREF from Node president_id to our Node node_id. Cause = cause 报告节点(ID node_id)无法接受节点president_id作为总裁。cause问题给出的一个BusyElection with wait = falseNot presidentElection without selecting new candidate,或No such cause CM_REGREF StartUp 8 INFO
Node node_id: We are Node own_id with dynamic ID dynamic_id, our left neighbor is Node id_1, our right is Node id_2 该节点已发现其集群中的相邻节点(节点 id_1和节点 id_2)。 node_idown_id并且 dynamic_id应该始终如一; 如果不是,则表示集群节点存在严重错误配置。 FIND_NEIGHBOURS StartUp 8 INFO
Node node_id: type shutdown initiated 该节点已收到关机信号。type关闭的或者是 ClusterNode NDBStopStarted StartUp 1 INFO
Node node_id: Node shutdown completed [ ] [ ], actionInitiated by signal signal. 该节点已关闭。该报告可以包括 action,其如果存在的话是一个restartingno startinitial该报告还可能包括对NDB议定书 的提及 signal; 有关可能的信号,请参阅 操作和信号 NDBStopCompleted StartUp 1 INFO
Node node_id: Forced node shutdown completed [ , action] .[ ] [ ] [ [ ]]Occurred during startphase start_phase. Initiated by signal.Caused by error error_code: 'error_message(error_classification). error_status'.(extra info extra_code) 该节点已被强制关闭。action(之一 restartingno startinitial)随后被采取,如果有的话,也有报道。如果在节点启动时发生关闭,则报告将包含start_phase节点失败期间的情况。如果这是signal发送到节点的结果, 则还会提供此信息(有关更多信息,请参阅 操作和信号)。如果导致失败的错误是已知的,那么也包括在内; 有关NDB错误消息和分类的更多信息 ,请参阅NDB群集API错误 NDBStopForced StartUp 1 ALERT
Node node_id: Node shutdown aborted 节点关闭过程被用户中止。 NDBStopAborted StartUp 1 INFO
Node node_id: StartLog: [GCI Keep: keep_pos LastCompleted: last_pos NewestRestorable: restore_pos] 这报告节点启动期间引用的全局检查点。之前的重做日志keep_pos被删除。last_pos是参与其中的数据节点的最后一个全球检查点; restore_pos是实际用于恢复所有数据节点的全局检查点。 StartREDOLog StartUp 4 INFO
startup_message[ 另行列出; 见下文。] 在不同情况下可能会记录许多可能的启动消息。这些是单独列出的; 请参见 第21.5.7.2节“NDB群集日志启动消息” StartReport StartUp 4 INFO
Node node_id: Node restart completed copy of dictionary information 数据字典信息复制到重新启动的节点已完成。 NR_CopyDict NodeRestart 8 INFO
Node node_id: Node restart completed copy of distribution information 将数据分发信息复制到重新启动的节点已经完成。 NR_CopyDistr NodeRestart 8 INFO
Node node_id: Node restart starting to copy the fragments to Node node_id 片段复制到起始数据节点 node_id已经开始 NR_CopyFragsStarted NodeRestart 8 INFO
Node node_id: Table ID = table_id, fragment ID = fragment_id have been copied to Node node_id fragment_idtable_id中的片段已被复制到数据节点node_id NR_CopyFragDone NodeRestart 10 INFO
Node node_id: Node restart completed copying the fragments to Node node_id 复制所有表片段以重新启动数据节点 node_id已完成 NR_CopyFragsCompleted NodeRestart 8 INFO
Node node_id: Node node1_id completed failure of Node node2_id 数据节点node1_id已检测到数据节点的故障node2_id NodeFailCompleted NodeRestart 8 ALERT
All nodes completed failure of Node node_id 所有(剩余的)数据节点都检测到数据节点的故障 node_id NodeFailCompleted NodeRestart 8 ALERT
Node failure of node_idblock completed 数据节点的故障node_id已在被检测 的内核块,其中块是1 ,或 ; 有关更多信息,请参阅 NDB内核块blockNDBDBTCDBDICTDBDIHDBLQH NodeFailCompleted NodeRestart 8 ALERT
Node mgm_node_id: Node data_node_id has failed. The Node state at failure was state_code 数据节点失败。故障发生时的状态由仲裁状态代码描述 state_code:可以在文件中找到可能的状态代码值 include/kernel/signaldata/ArbitSignalData.hpp NODE_FAILREP NodeRestart 8 ALERT
President restarts arbitration thread [state=state_code]Prepare arbitrator node node_id [ticket=ticket_id]Receive arbitrator node node_id [ticket=ticket_id]Started arbitrator node node_id [ticket=ticket_id]Lost arbitrator node node_id - process failure [state=state_code]Lost arbitrator node node_id - process exit [state=state_code]Lost arbitrator node node_id - error_message [state=state_code] 这是关于集群仲裁现状和进展的报告。node_id是选作仲裁者的管理节点或SQL节点的节点ID。state_code是一个仲裁州代码,见于 include/kernel/signaldata/ArbitSignalData.hpp发生错误时,会提供一个error_message也在其中定义的 an ArbitSignalData.hppticket_id是仲裁员在参与其选择的所有节点选择时发出的唯一标识符; 这用于确保请求仲裁的每个节点都是参与选择过程的节点之一。 ArbitState NodeRestart 6 INFO
Arbitration check lost - less than 1/2 nodes leftArbitration check won - all node groups and more than 1/2 nodes leftArbitration check won - node group majorityArbitration check lost - missing node groupNetwork partitioning - arbitration required或或Arbitration won - positive reply from node node_idArbitration lost - negative reply from node node_idNetwork partitioning - no arbitrator availableNetwork partitioning - no arbitrator configuredArbitration failure - error_message [state=state_code] 此消息报告仲裁结果。在仲裁失败的情况下, 提供error_message仲裁和仲裁state_code; 这两个定义都可以在这里找到 include/kernel/signaldata/ArbitSignalData.hpp ArbitResult NodeRestart 2 ALERT
Node node_id: GCP Take over started 该节点正试图承担下一个全局检查点的责任(即它正在成为主节点) GCP_TakeoverStarted NodeRestart 7 INFO
Node node_id: GCP Take over completed 这个节点已经成为主人,并承担了下一个全球检查点的责任 GCP_TakeoverCompleted NodeRestart 7 INFO
Node node_id: LCP Take over started 该节点正在尝试承担下一组本地检查点的责任(即,它正在成为主节点) LCP_TakeoverStarted NodeRestart 7 INFO
Node node_id: LCP Take over completed 该节点已成为主节点,并承担了下一组本地检查点的责任 LCP_TakeoverCompleted NodeRestart 7 INFO
Node node_id: Trans. Count = transactions, Commit Count = commits, Read Count = reads, Simple Read Count = simple_reads, Write Count = writes, AttrInfo Count = AttrInfo_objects, Concurrent Operations = concurrent_operations, Abort Count = aborts, Scans = scans, Range scans = range_scans 这个交易活动报告大约每10秒钟发一次 TransReportCounters Statistic 8 INFO
Node node_id: Operations=operations 该节点执行的操作数量,大约每10秒提供一次 OperationReportCounters Statistic 8 INFO
Node node_id: Table with ID = table_id created 具有所示表格ID的表格已被创建 TableCreated Statistic 7 INFO
Node node_id: Mean loop Counter in doJob last 8192 times = count JobStatistic Statistic 9 INFO
Mean send size to Node = node_id last 4096 sends = bytes bytes 该节点bytes发送一次平均字节数给节点node_id SendBytesStatistic Statistic 9 INFO
Mean receive size to Node = node_id last 4096 sends = bytes bytes bytes每次从节点接收数据时,该节点正在接收平均数据 node_id ReceiveBytesStatistic Statistic 9 INFO
Node node_id: Data usage is data_memory_percentage% (data_pages_used 32K pages of total data_pages_total) / Node node_id: Index usage is index_memory_percentage% (index_pages_used 8K pages of total index_pages_total) 此报告是DUMP 1000在集群管理客户端发出命令时生成的; 有关详细信息,请参阅 DUMP 1000,在 MySQL的NDB簇内幕手册 MemoryUsage Statistic INFO
Node node1_id: Transporter to node node2_id reported error error_code: error_message 与节点通信时发生转运错误 node2_id; 对于转运错误代码和消息的列表,请参阅 NDB运输车错误,在 MySQL的NDB簇内幕手册 TransporterError Error 2 ERROR
Node node1_id: Transporter to node node2_id reported error error_code: error_message 在与节点通信时发出潜在转运问题的警告node2_id; 有关转运错误代码和消息的列表,请参阅 NDB转运错误,以获取更多信息 TransporterWarning Error 8 WARNING
Node node1_id: Node node2_id missed heartbeat heartbeat_id 该节点错过了来自节点的心跳 node2_id MissedHeartbeat Error 8 WARNING
Node node1_id: Node node2_id declared dead due to missed heartbeat 该节点已经错过了至少3次来自节点的心跳 node2_id,并且已经宣布该节点死亡 DeadDueToHeartbeat Error 8 ALERT
Node node1_id: Node Sent Heartbeat to node = node2_id 此节点已向节点发送心跳 node2_id SentHeartbeat Info 12 INFO
NDB 7.5.0及更早版本 :)Node node_id: Event buffer status: used=bytes_used (percent_used%) alloc=bytes_allocated (percent_available%) max=bytes_available apply_epoch=latest_restorable_epoch latest_epoch=latest_epoch 例如,在较大事件缓冲区使用期间可以看到此报告,例如,在较短时间内应用了许多更新; 报告显示了使用的字节数和事件缓冲存储器的百分比,分配的字节数和仍然可用的百分比,以及最新和最新的可恢复时期 EventBufferStatus Info 7 INFO
NDB 7.5.1及更高版本 :)Node node_id: Event buffer status (object_id): used=bytes_used (percent_used% of alloc) alloc=bytes_allocated max=bytes_available latest_consumed_epoch=latest_consumed_epoch latest_buffered_epoch=latest_buffered_epoch report_reason=report_reason 例如,在较大事件缓冲区使用期间可以看到此报告,例如,在较短时间内应用了许多更新; 报告显示使用的字节数和事件缓冲区内存的百分比,分配的字节数和仍然可用的百分比,以及最新的缓冲和消耗时期; 有关更多信息,请参见 第21.5.7.3节“群集日志中的事件缓冲区报告” EventBufferStatus2 Info 7 INFO
Node node_id: Entering single user modeNode node_id: Entered single user mode Node API_node_id has exclusive accessNode node_id: Entering single user mode 这些报告在进入和退出单用户模式时写入群集日志; API_node_id 是具有群集独占访问权限的API或SQL的节点ID(有关更多信息,请参见 第21.5.8节“NDB群集单用户模式”); 该消息表示发生了错误,并且在正常操作中不应该看到该错误Unknown single user report API_node_id SingleUser Info 7 INFO
Node node_id: Backup backup_id started from node mgm_node_id 使用管理节点已经开始备份 mgm_node_idSTART BACKUP命令发布时,此消息也会显示在集群管理客户端中 ; 有关更多信息,请参见 第21.5.3.2节“使用NDB集群管理客户端创建备份” BackupStarted Backup 7 INFO
Node node_id: Backup backup_id started from node mgm_node_id completed. StartGCP: start_gcp StopGCP: stop_gcp #Records: records #LogRecords: log_records Data: data_bytes bytes Log: log_bytes bytes 具有ID的备份backup_id已完成; 有关更多信息,请参见 第21.5.3.2节“使用NDB集群管理客户端创建备份” BackupCompleted Backup 7 INFO
Node node_id: Backup request from mgm_node_id failed to start. Error: error_code 备份无法启动; 有关错误代码,请参阅 MGM API错误 BackupFailedToStart Backup 7 ALERT
Node node_id: Backup backup_id started from mgm_node_id has been aborted. Error: error_code 备份在启动后终止,可能是由于用户干预 BackupAborted Backup 7 ALERT

21.5.7.2 NDB集群日志启动消息

以下列表中提供了具有说明的可能启动消息:

  • Initial start, waiting for %s to connect, nodes [ all: %s connected: %s no-wait: %s ]

  • Waiting until nodes: %s connects, nodes [ all: %s connected: %s no-wait: %s ]

  • Waiting %u sec for nodes %s to connect, nodes [ all: %s connected: %s no-wait: %s ]

  • Waiting for non partitioned start, nodes [ all: %s connected: %s missing: %s no-wait: %s ]

  • Waiting %u sec for non partitioned start, nodes [ all: %s connected: %s missing: %s no-wait: %s ]

  • Initial start with nodes %s [ missing: %s no-wait: %s ]

  • Start with all nodes %s

  • Start with nodes %s [ missing: %s no-wait: %s ]

  • Start potentially partitioned with nodes %s [ missing: %s no-wait: %s ]

  • Unknown startreport: 0x%x [ %s %s %s %s ]

21.5.7.3群集日志中的事件缓冲区报告

NDB对从数据节点接收到的事件使用一个或多个内存缓冲区。每个Ndb订阅表事件的对象都有一个这样的缓冲区,这意味着每个进行二进制日志记录的mysqld通常有两个缓冲区(一个用于模式事件的缓冲区,另一个用于数据事件)。每个缓冲区都包含由事件组成的时期。这些事件由操作类型(插入,更新,删除)和行数据(图像加元数据之前和之后)组成。

NDB在集群日志中生成消息来描述这些缓冲区的状态。虽然这些报告出现在集群日志中,但它们指的是API节点上的缓冲区(与数据节点生成的大多数其他集群日志消息不同)。在NDB 7.5.1中,这些消息及其背后的数据结构发生了显着变化,增加了NDB_LE_EventBufferStatus2事件类型和ndb_logevent_EventBufferStatus2数据结构(请参阅Ndb_logevent_type类型)。本次讨论的其余部分着重于基于的实现NDB_LE_EventBufferStatus2

集群日志中的事件缓冲区日志记录报告使用此处显示的格式:

节点node_id:事件缓冲区状态(object_id):
used = bytes_usedpercent_used%的分配)
alloc = bytes_allocatedpercent_alloc最大%)max = bytes_available
latest_consumed_epoch = latest_consumed_epoch
latest_buffered_epoch = latest_buffered_epoch
report_reason =report_reason

这里列出了构成本报告的字段,并附有说明:

  • node_id:报告始发节点的ID。

  • object_idNdb报告发起对象的ID

  • bytes_used:缓冲区使用的字节数。

  • percent_used:使用的分配字节的百分比。

  • bytes_allocated:分配给此缓冲区的字节数。

  • percent_alloc:使用的可用字节的百分比; 如果ndb_eventbuffer_max_alloc 等于0(不限制),则不打印

  • bytes_available:可用字节数; 如果ndb_eventbuffer_max_alloc是0(无限制),则该值为0

  • latest_consumed_epoch:最近消耗完成的时代。(在NDB API应用程序中,这是通过调用完成的 nextEvent()。)

  • latest_buffered_epoch:最近缓冲(完全)在事件缓冲区中的时期。

  • report_reason:制作报告的原因。可能的原因显示在本节后面。

latest_consumed_epochlatest_buffered_epoch字段分别对应于apply_gcilatest_gci之前的NDB 7.5.1使用旧式的事件缓冲器日志消息的字段。

报告的可能原因在下面的列表中描述:

  • ENOUGH_FREE_EVENTBUFFER:事件缓冲区有足够的空间。

    LOW_FREE_EVENTBUFFER:事件缓冲区空闲空间不足。

    触发这些报告的阈值自由百分比级别可通过设置ndb_report_thresh_binlog_mem_usage 服务器变量进行调整

  • BUFFERED_EPOCHS_OVER_THRESHOLD:缓冲历元的数量是否超过配置的阈值。这个数字是一个已经被全部收到最新的时代和最近已经被消耗的时期之间的差异(在NDB API应用,这是通过调用 nextEvent()nextEvent2())。该报告每秒生成一次,直到缓存时期的数量低于阈值,可通过设置ndb_report_thresh_binlog_epoch_slip 服务器变量来调整该阈值 您也可以通过调用来调整NDB API应用程序中的阈值 setEventBufferQueueEmptyEpoch()

  • PARTIALLY_DISCARDING:事件缓冲存储器已耗尽,ndb_eventbuffer_max_alloc 即已使用100% 任何部分缓冲时期都会被缓冲到完成,即使使用率超过100%,但收到的任何新时代都将被丢弃。这意味着事件流发生了差距。

  • COMPLETELY_DISCARDING:没有时代被缓冲。

  • PARTIALLY_BUFFERING:差距后的无缓冲区百分比已上升到阈值,可以在mysql客户端使用 ndb_eventbuffer_free_percent 服务器系统变量或在NDB API应用程序中通过调用 设置该阈值set_eventbuffer_free_percent()新的时代被缓冲。由于缺口而无法完成的时代将被废弃。

  • COMPLETELY_BUFFERING:所有收到的时代都被缓冲,这意味着有足够的事件缓冲存储器。事件流的差距已经结束。

21.5.7.4 NDB集群:NDB传输器错误

本部分列出出现传输错误时写入群集日志的错误代码,名称和消息。

表21.348由传输器错误生成的错误代码

错误代码 错误名称 错误文本
为0x00 TE_NO_ERROR 没有错误
0×01 TE_ERROR_CLOSING_SOCKET 在关闭套接字期间发现错误
0×02 TE_ERROR_IN_SELECT_BEFORE_ACCEPT 接受之前发现错误。运输车将重试
×03 TE_INVALID_MESSAGE_LENGTH 消息中发现错误(无效消息长度)
0×04 TE_INVALID_CHECKSUM 消息中发现错误(校验和)
0×05 TE_COULD_NOT_CREATE_SOCKET 创建套接字时发现错误(无法创建套接字)
0×06 TE_COULD_NOT_BIND_SOCKET 绑定服务器套接字时发现错误
0×07 TE_LISTEN_FAILED 在侦听服务器套接字时发现错误
0x08的 TE_ACCEPT_RETURN_ERROR 接受期间发现错误(接受返回错误)
0x0B中 TE_SHM_DISCONNECT 远程节点已断开连接
0x0c TE_SHM_IPC_STAT 无法检查shm段
0X0D TE_SHM_UNABLE_TO_CREATE_SEGMENT 无法创建shm段
为0x0E TE_SHM_UNABLE_TO_ATTACH_SEGMENT 无法附加shm段
为0x0F TE_SHM_UNABLE_TO_REMOVE_SEGMENT 无法删除shm段
为0x10 TE_TOO_SMALL_SIGID Sig ID太小
为0x11 TE_TOO_LARGE_SIGID Sig ID太大
0×12 TE_WAIT_STACK_FULL 等待堆栈已满
0×13 TE_RECEIVE_BUFFER_FULL 接收缓冲区已满
0×14 TE_SIGNAL_LOST_SEND_BUFFER_FULL 发送缓冲区已满,并尝试强制发送失败
为0x15 TE_SIGNAL_LOST 发送失败,原因不明(信号丢失)
0x16 TE_SEND_BUFFER_FULL 发送缓冲区已满,但睡了一阵子就解决了
0x0017 TE_SCI_LINK_ERROR 没有从该节点到交换机的链路
为0x18 TE_SCI_UNABLE_TO_START_SEQUENCE 无法启动序列,因为系统资源被忽略或者没有创建序列
0x19 TE_SCI_UNABLE_TO_REMOVE_SEQUENCE 无法删除序列
0X1A TE_SCI_UNABLE_TO_CREATE_SEQUENCE 无法创建序列,因为系统资源被豁免。必须重启
0x1b TE_SCI_UNRECOVERABLE_DATA_TFX_ERROR 试图发送冗余链接数据但失败
为0x1C TE_SCI_CANNOT_INIT_LOCALSEGMENT 无法初始化本地段
0x1d TE_SCI_CANNOT_MAP_REMOTESEGMENT 无法映射远程段
0X1E TE_SCI_UNABLE_TO_UNMAP_SEGMENT 无法释放此分段使用的资源(步骤1)
为0x1F TE_SCI_UNABLE_TO_REMOVE_SEGMENT 无法释放该细分使用的资源(第2步)
为0x20 TE_SCI_UNABLE_TO_DISCONNECT_SEGMENT 无法断开与远程段的连接
为0x21 TE_SHM_IPC_PERMANENT Shm ipc永久性错误
为0x22 TE_SCI_UNABLE_TO_CLOSE_CHANNEL 无法关闭sci频道和分配的资源

21.5.8 NDB集群单用户模式

单用户模式使数据库管理员能够将访问数据库系统的权限限制为单个API节点,例如MySQL服务器(SQL节点)或ndb_restore的实例进入单用户模式时,与所有其他API节点的连接将正常关闭,并且所有正在运行的事务都会中止。不允许新交易开始。

一旦群集进入单用户模式,只有指定的API节点被授权访问数据库。

您可以ALL STATUSndb_mgm客户端中使用该命令 查看群集何时进入单用户模式。您还可以检查表格statusndbinfo.nodes有关更多信息,请参见 第21.5.10.28节“ndbinfo节点表”)。

例:

ndb_mgm> ENTER SINGLE USER MODE 5

执行此命令并且群集已进入单用户模式后,节点ID为的API节点将5 成为群集唯一允许的用户。

上述命令中指定的节点必须是API节点; 试图指定任何其他类型的节点将被拒绝。

注意

当调用前面的命令时,指定节点上运行的所有事务都会中止,连接关闭,服务器必须重新启动。

该命令EXIT SINGLE USER MODE将群集数据节点的状态从单用户模式更改为正常模式。API节点(例如MySQL服务器)等待连接(即等待群集就绪并可用)再次被允许连接。表示为单用户节点的API节点在状态改变期间和之后继续运行(如果仍然连接)。

例:

ndb_mgm> EXIT SINGLE USER MODE

在单用户模式下运行时,有两种建议的方式来处理节点故障:

  • 方法1:

    1. 完成所有单用户模式事务

    2. 发出EXIT SINGLE USER MODE命令

    3. 重新启动集群的数据节点

  • 方法2:

    在进入单用户模式之前重新启动存储节点。

21.5.9快速参考:NDB集群SQL语句

本节讨论几种可用于管理和监视连接到NDB群集的MySQL服务器的SQL语句,并且在某些情况下提供有关群集本身的信息。

  • SHOW ENGINE NDB STATUSSHOW ENGINE NDBCLUSTER STATUS

    此语句的输出包含有关服务器与群集的连接,NDB群集对象的创建和使用以及NDB群集复制的二进制日志记录的信息。

    有关使用示例和更详细的信息请参见第13.7.5.15节“SHOW ENGINE语法”

  • SHOW ENGINES

    这个语句可以用来确定是否在MySQL服务器中启用了集群支持,如果是,那么它是否处于活动状态。

    有关更多详细信息,请参见第13.7.5.16节“SHOW ENGINES语法”

    注意

    该声明不支持一个 LIKE条款。但是,您可以使用 按照下一项讨论的LIKE方式过滤对INFORMATION_SCHEMA.ENGINES表的查询

  • SELECT * FROM INFORMATION_SCHEMA.ENGINES [WHERE ENGINE LIKE 'NDB%']

    这相当于SHOW ENGINES使用数据库ENGINES表格 INFORMATION_SCHEMASHOW ENGINES 声明的情况不同,可以使用LIKE子句过滤结果 ,并选择特定的列来获取可能在脚本中使用的信息。例如,以下查询显示服务器是否使用NDB支持构建,如果是,是否已启用:

    mysql> SELECT SUPPORT FROM INFORMATION_SCHEMA.ENGINES
        - >   WHERE ENGINE LIKE 'NDB%';
    + --------- +
    | 支持|
    + --------- +
    | ENABLED |
    + --------- +
    

    有关更多信息请参见第24.6节“INFORMATION_SCHEMA引擎表”

  • SHOW VARIABLES LIKE 'NDB%'

    此语句提供了与NDB存储引擎相关的大多数服务器系统变量列表及其值,如下所示:

    MySQL的> SHOW VARIABLES LIKE 'NDB%';
    + ------------------------------- + ------- +
    | 变量名| 值|
    + ------------------------------- + ------- +
    | ndb_autoincrement_prefetch_sz | 32 |
    | ndb_cache_check_time | 0 |
    | ndb_extra_logging | 0 |
    | ndb_force_send | ON |
    | ndb_index_stat_cache_entries | 32 |
    | ndb_index_stat_enable | OFF |
    | ndb_index_stat_update_freq | 20 |
    | ndb_report_thresh_binlog_epoch_slip | 3 |
    | ndb_report_thresh_binlog_mem_usage | 10 |
    | ndb_use_copying_alter_table | OFF |
    | ndb_use_exact_count | ON |
    | ndb_use_transactions | ON |
    + ------------------------------- + ------- +
    

    有关更多信息请参见第5.1.5节“服务器系统变量”

  • SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'NDB%';

    该语句与上一条中SHOW描述命令相同,并提供几乎相同的输出,如下所示:

    mysql> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
        - >   WHERE VARIABLE_NAME LIKE 'NDB%';
    + ------------------------------- + ----------- ----- +
    | VARIABLE_NAME | VARIABLE_VALUE |
    + ------------------------------- + ----------- ----- +
    | NDB_AUTOINCREMENT_PREFETCH_SZ | 32 |
    | NDB_CACHE_CHECK_TIME | 0 |
    | NDB_EXTRA_LOGGING | 0 |
    | NDB_FORCE_SEND | ON |
    | NDB_INDEX_STAT_CACHE_ENTRIES | 32 |
    | NDB_INDEX_STAT_ENABLE | OFF |
    | NDB_INDEX_STAT_UPDATE_FREQ | 20 |
    | NDB_REPORT_THRESH_BINLOG_EPOCH_SLIP | 3 |
    | NDB_REPORT_THRESH_BINLOG_MEM_USAGE | 10 |
    | NDB_USE_COPYING_ALTER_TABLE | OFF |
    | NDB_USE_EXACT_COUNT | ON |
    | NDB_USE_TRANSACTIONS | ON |
    + ------------------------------- + ----------- ----- +
    

    SHOW命令不同的 是,可以选择单个列。例如:

    mysql> SELECT VARIABLE_VALUE 
        - >    FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
        - >   WHERE VARIABLE_NAME = 'ndb_force_send';
    + ---------------- +
    | VARIABLE_VALUE |
    + ---------------- +
    | ON |
    + ---------------- +
    

    有关更多信息,请参见第24.10节“INFORMATION_SCHEMA GLOBAL_VARIABLES和SESSION_VARIABLES表”第5.1.5节“服务器系统变量”

  • SHOW STATUS LIKE 'NDB%'

    该语句一目了然地显示MySQL服务器是否充当群集SQL节点,如果是,它将提供MySQL服务器的群集节点ID,与其连接的群集管理服务器的主机名和端口以及集群中数据节点的数量,如下所示:

    MySQL的> SHOW STATUS LIKE 'NDB%';
    + -------------------------- + ---------------- +
    | 变量名| 值|
    + -------------------------- + ---------------- +
    | Ndb_cluster_node_id | 10 |
    | Ndb_config_from_host | 198.51.100.103 |
    | Ndb_config_from_port | 1186 |
    | Ndb_number_of_data_nodes | 4 |
    + -------------------------- + ---------------- +
    

    如果MySQL服务器是使用集群支持构建的,但未连接到集群,则此语句输出中的所有行都包含零个或一个空字符串:

    MySQL的> SHOW STATUS LIKE 'NDB%';
    + -------------------------- + ------- +
    | 变量名| 值|
    + -------------------------- + ------- +
    | Ndb_cluster_node_id | 0 |
    | Ndb_config_from_host | |
    | Ndb_config_from_port | 0 |
    | Ndb_number_of_data_nodes | 0 |
    + -------------------------- + ------- +
    

    另请参见第13.7.5.35节“显示状态语法”

  • SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE 'NDB%';

    该声明提供与SHOW前一项中讨论命令类似的输出 但是,与使用情况不同的 SHOW STATUS是,可以使用SELECTSQL来提取SQL中的值以用于脚本以用于监视和自动化目的。

    有关更多信息请参见第24.9节“INFORMATION_SCHEMA GLOBAL_STATUS和SESSION_STATUS表”

您还可以查询ndbinfo信息数据库中的表以 获取有关许多NDB群集操作的实时数据。请参见 第21.5.10节“ndbinfo:NDB集群信息数据库”

21.5.10 ndbinfo:NDB群集信息数据库

21.5.10.1 ndbinfo arbitrator_validity_detail表
21.5.10.2 ndbinfo arbitrator_validity_summary表
21.5.10.3 ndbinfo阻止表
21.5.10.4 ndbinfo cluster_locks表
21.5.10.5 ndbinfo cluster_operations表
21.5.10.6 ndbinfo cluster_transactions表
21.5.10.7 ndbinfo config_nodes表
21.5.10.8 ndbinfo config_params表
21.5.10.9 ndbinfo config_values表
21.5.10.10 ndbinfo计数器表
21.5.10.11 ndbinfo cpustat表
21.5.10.12 ndbinfo cpustat_50ms表
21.5.10.13 ndbinfo cpustat_1sec表
21.5.10.14 ndbinfo cpustat_20sec表
21.5.10.15 ndbinfo dict_obj_info表
21.5.10.16 ndbinfo dict_obj_types表
21.5.10.17 ndbinfo disk_write_speed_base表
21.5.10.18 ndbinfo disk_write_speed_aggregate表
21.5.10.19 ndbinfo disk_write_speed_aggregate_node表
21.5.10.20 ndbinfo diskpagebuffer表
21.5.10.21 ndbinfo error_messages表
21.5.10.22 ndbinfo locks_per_fragment表
21.5.10.23 ndbinfo logbuffers表
21.5.10.24 ndbinfo logspaces表
21.5.10.25 ndbinfo成员资格表
21.5.10.26 ndbinfo memoryusage表
21.5.10.27 ndbinfo memory_per_fragment表
21.5.10.28 ndbinfo节点表
21.5.10.29 ndbinfo operations_per_fragment表
21.5.10.30 ndbinfo处理表
21.5.10.31 ndbinfo资源表
21.5.10.32 ndbinfo restart_info表
21.5.10.33 ndbinfo server_locks表
21.5.10.34 ndbinfo server_operations表
21.5.10.35 ndbinfo server_transactions表
21.5.10.36 ndbinfo table_distribution_status表
21.5.10.37 ndbinfo table_fragments表
21.5.10.38 ndbinfo table_info表
21.5.10.39 ndbinfo table_replicas表
21.5.10.40 ndbinfo tc_time_track_stats表
21.5.10.41 ndbinfo线程阻塞表
21.5.10.42 ndbinfo线程表
21.5.10.43 ndbinfo线程表
21.5.10.44 ndbinfo转运蛋白表

ndbinfo 是包含特定于NDB群集的信息的数据库。

该数据库包含许多表格,每个表格提供有关NDB集群节点状态,资源使用情况和操作的不同类型的数据。您可以在接下来的几节中找到有关这些表格的更多详细信息。

ndbinfo包含在MySQL服务器中的NDB群集支持中; 不需要特殊的编译或配置步骤; 这些表是由MySQL服务器在连接到群集时创建的。您可以验证ndbinfo在给定的MySQL服务器实例支持是否处于活动状态SHOW PLUGINS; 如果ndbinfo支持已启用,您应该看到一个包含一行ndbinfoName列,并ACTIVEStatus列,如下所示(强调文本):

MySQL的> SHOW PLUGINS;
+ ---------------------------------- + -------- + ----- --------------- + --------- + --------- +
| 名称| 状态| 类型| 图书馆| 许可证|
+ ---------------------------------- + -------- + ----- --------------- + --------- + --------- +
| binlog | ACTIVE | 存储引擎| NULL | GPL |
| mysql_native_password | ACTIVE | 认证| NULL | GPL |
| sha256_password | ACTIVE | 认证| NULL | GPL |
| MRG_MYISAM | ACTIVE | 存储引擎| NULL | GPL |
| MEMORY | ACTIVE | 存储引擎| NULL | GPL |
| CSV | ACTIVE | 存储引擎| NULL | GPL |
| MyISAM | ACTIVE | 存储引擎| NULL | GPL |
| InnoDB | ACTIVE | 存储引擎| NULL | GPL |
| INNODB_TRX | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_LOCK_WAITS | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_CMP | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_CMP_RESET | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_CMPMEM | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_CMPMEM_RESET | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_CMP_PER_INDEX | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_BUFFER_PAGE | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_BUFFER_PAGE_LRU | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_BUFFER_POOL_STATS | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_TEMP_TABLE_INFO | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_METRICS | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_FT_DELETED | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_FT_BEING_DELETED | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_FT_CONFIG | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_FT_INDEX_CACHE | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_FT_INDEX_TABLE | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_SYS_TABLES | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_SYS_TABLESTATS | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_SYS_INDEXES | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_SYS_COLUMNS | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_SYS_FIELDS | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_SYS_FOREIGN | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_SYS_FOREIGN_COLS | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_SYS_TABLESPACES | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_SYS_DATAFILES | ACTIVE | 信息SCHEMA | NULL | GPL |
| INNODB_SYS_VIRTUAL | ACTIVE | 信息SCHEMA | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | 存储引擎| NULL | GPL |
| ndbCluster | ACTIVE | 存储引擎| NULL | GPL |
| ndbinfo | ACTIVE | 存储引擎| NULL | GPL |
| ndb_transid_mysql_connection_map | ACTIVE | 信息SCHEMA | NULL | GPL |
| 黑洞| ACTIVE | 存储引擎| NULL | GPL |
| 存档| ACTIVE | 存储引擎| NULL | GPL |
| 分区| ACTIVE | 存储引擎| NULL | GPL |
| ngram | ACTIVE | FTPARSER | NULL | GPL |
+ ---------------------------------- + -------- + ----- --------------- + --------- + --------- +
一套46行(0.00秒)

您还可以通过检查SHOW ENGINES包含ndbinfoEngine列和列YES中的的输出来 执行 Support 此操作(如下所示)(强调文本):

MySQL的> SHOW ENGINES\G
*************************** 1. row ******************** *******
      引擎:ndbcluster
     支持:是
     评论:群集,容错表
交易:是
          XA:NO
  保存点:NO
*************************** 2. row ******************** *******
      引擎:CSV
     支持:是
     评论:CSV存储引擎
交易:NO
          XA:NO
  保存点:NO
*************************** 3. row ******************** *******
      引擎:InnoDB
     支持:默认
     评论:支持事务,行级锁定和外键
交易:是
          XA:是的
  保存点:是
*************************** 4. row ******************** *******
      引擎:BLACKHOLE
     支持:是
     评论:/ dev / null存储引擎(您写入的任何内容都会消失)
交易:NO
          XA:NO
  保存点:NO
*************************** 5. row ******************** *******
      引擎:MyISAM
     支持:是
     评论:MyISAM存储引擎
交易:NO
          XA:NO
  保存点:NO
*************************** 6. row ******************** *******
      引擎:MRG_MYISAM
     支持:是
     评论:收集相同的MyISAM表格
交易:NO
          XA:NO
  保存点:NO
*************************** 7. row ******************** *******
      引擎:ARCHIVE
     支持:是
     评论:存档存储引擎
交易:NO
          XA:NO
  保存点:NO
*************************** 8. row ******************** *******
      引擎:ndbinfo
     支持:是
     评论:NDB集群系统信息存储引擎
交易:NO
          XA:NO
  保存点:NO
*************************** 9. row ******************** *******
      引擎:PERFORMANCE_SCHEMA
     支持:是
     评论:性能模式
交易:NO
          XA:NO
  保存点:NO
*************************** 10. row ******************** *******
      引擎:MEMORY
     支持:是
     评论:基于散列,存储在内存中,对临时表很有用
交易:NO
          XA:NO
  保存点:NO
整套10行(0.00秒)

如果ndbinfo启用了支持,则可以ndbinfo使用mysql或其他MySQL客户端中的SQL语句进行 访问例如,您可以看到ndbinfo在输出中列出 SHOW DATABASES,如下所示(强调文本):

MySQL的> SHOW DATABASES;
+ -------------------- +
| 数据库|
+ -------------------- +
| information_schema |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
+ -------------------- +
5排(0.04秒)

如果mysqld进程未使用该--ndbcluster选项启动 ndbinfo则不可用并且不会显示SHOW DATABASES如果 mysqld的以前连接到NDB簇但群集变得不可用(由于事件诸如集群关机,网络连接的损失,等等), ndbinfo并且它的表保持可见,但试图访问的任何表(除了blocksconfig_params)与NDBINFO出现错误157'与NDB连接失败'失败

除了blocksconfig_params表之外,我们称之为 ndbinfo 的实际上是从内部NDB生成的视图,这些内部表通常对MySQL服务器不可见。

所有ndbinfo表都是只读的,并且在查询时按需生成。因为它们中的许多是由数据节点并行生成的,而其他许多节点是特定于某个给定的SQL节点的,所以它们不能保证提供一致的快照。

另外,ndbinfo表格不支持按下连接 所以ndbinfo即使查询使用了WHERE子句,连接大型 表也​​可能需要将大量数据传输到请求的API节点

ndbinfo表不包含在查询缓存中。(错误#59831)

您可以ndbinfo使用USE语句选择数据库 ,然后发出 SHOW TABLES语句以获取表的列表,就像其他任何数据库一样,如下所示:

MySQL的> USE ndbinfo;
数据库改变

MySQL的> SHOW TABLES;
+ --------------------------------- +
| Tables_in_ndbinfo |
+ --------------------------------- +
| arbitrator_validity_detail |
| arbitrator_validity_summary |
| 块|
| cluster_locks |
| cluster_operations |
| cluster_transactions |
| config_nodes |
| config_params |
| config_values |
| 柜台|
| cpustat |
| cpustat_1sec |
| cpustat_20sec |
| cpustat_50ms |
| dict_obj_info |
| dict_obj_types |
| disk_write_speed_aggregate |
| disk_write_speed_aggregate_node |
| disk_write_speed_base |
| diskpagebuffer |
| error_messages |
| locks_per_fragment |
| logbuffers |
| 日志空间|
| 成员资格|
| memory_per_fragment |
| memoryusage |
| 节点|
| operations_per_fragment |
| 进程|
| 资源|
| 重新启动信息|
| server_locks |
| server_operations |
| server_transactions |
| table_distribution_status |
| table_fragments |
| table_info |
| table_replicas |
| tc_time_track_stats |
| 线程块|
| 线程|
| threadstat |
| 运输商|
+ --------------------------------- +
集合中有44行(0.00秒)

在NDB 7.5.0(及更高版本)中,所有ndbinfo表都使用NDB存储引擎; 然而,一个 ndbinfo条目仍然出现在的输出 SHOW ENGINESSHOW PLUGINS如先前所描述。

config_values表格添加到NDB 7.5.0中。

cpustatcpustat_50mscpustat_1seccpustat_20sec,和 threads表中NDB 7.5.2添加。

cluster_lockslocks_per_fragment以及 server_locks在NDB 7.5.3添加表。

dict_obj_infotable_distribution_statustable_fragmentstable_info,和 table_replicas表中NDB 7.5.4添加。

config_nodesprocesses表中的NDB 7.5.7和7.6.2 NDB添加。

error_messages表在NDB 7.6.4中添加。

您可以SELECT对这些表执行语句,就像您通常所期望的那样:

MySQL的> SELECT * FROM memoryusage;
+ --------- + --------------------- + -------- + -------- ---- + ------------ + ------------- +
| node_id | memory_type | 使用| used_pa​​ges | 总| | total_pages |
+ --------- + --------------------- + -------- + -------- ---- + ------------ + ------------- +
| 5 | 数据存储器| 753664 | 23 | 1073741824 | 32768 |
| 5 | 索引内存| 163840 | 20 | 1074003968 | 131104 |
| 5 | 长消息缓冲区| 2304 | 9 | 67108864 | 262144 |
| 6 | 数据存储器| 753664 | 23 | 1073741824 | 32768 |
| 6 | 索引内存| 163840 | 20 | 1074003968 | 131104 |
| 6 | 长消息缓冲区| 2304 | 9 | 67108864 | 262144 |
+ --------- + --------------------- + -------- + -------- ---- + ------------ + ------------- +
6行(0.02秒)

更复杂的查询,例如SELECT使用该memoryusage表的以下两个 语句 是可能的:

MySQL的> SELECT SUM(used) as 'Data Memory Used, All Nodes'
     >      FROM memoryusage
     >     WHERE memory_type = 'Data memory';
+ ----------------------------- +
| 已使用数据存储器,所有节点|
+ ----------------------------- +
| 6460 |
+ ----------------------------- +
一排(0.37秒)

MySQL的> SELECT SUM(max) as 'Total IndexMemory Available'
     >      FROM memoryusage
     >     WHERE memory_type = 'Index memory';
+ ----------------------------- +
| 总索引内存可用|
+ ----------------------------- +
| 25664 |
+ ----------------------------- +
一排(0.33秒)

ndbinfo表名和列名是区分大小写的(就像ndbinfo 数据库本身的名称一样)。这些标识符是小写的。尝试使用错误的lettercase会导致错误,如以下示例所示:

MySQL的> SELECT * FROM nodes;
+ --------- + -------- + --------- + ------------- +
| node_id | 正常运行时间| 状态| start_phase |
+ --------- + -------- + --------- + ------------- +
| 1 | 13602 | STARTED | 0 |
| 2 | 16 | STARTED | 0 |
+ --------- + -------- + --------- + ------------- +
2排(0.04秒)

mysql> 错误1146(42S02):表'ndbinfo.Nodes'不存在SELECT * FROM Nodes;

mysqldumpndbinfo完全忽略 数据库,并将其从任何输出中排除。即使使用--databases--all-databases选项也是如此

NDB群集还在INFORMATION_SCHEMA信息数据库中维护表, FILES其中包含有关用于NDB群集磁盘数据存储的文件的信息的ndb_transid_mysql_connection_map 表以及显示事务,事务协调器和NDB群集API节点之间关系表。有关更多信息,请参阅表格的说明或 第21.5.11节“NDB群集的INFORMATION_SCHEMA表”

21.5.10.1 ndbinfo arbitrator_validity_detail表

arbitrator_validity_detail表显示群集中的每个数据节点都具有仲裁者的视图。它是membership表的一个子集

下表提供了有关表中列的信息arbitrator_validity_detail对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.349 arbitrator_validity_detail表的列

列名称 类型 描述
node_id 整数 此节点的节点ID
arbitrator 整数 仲裁员的节点ID
arb_ticket 用于跟踪仲裁的内部标识符
arb_connected Yes 要么 No 该节点是否连接到仲裁器
arb_state 枚举(参见文本) 仲裁状态

节点ID与ndb_mgm -e“SHOW”报告的节点ID相同

所有节点应该显示相同的arbitratorarb_ticket值以及相同的 arb_state值。可能的 arb_state值是 ARBIT_NULLARBIT_INITARBIT_FINDARBIT_PREP1ARBIT_PREP2ARBIT_STARTARBIT_RUNARBIT_CHOOSEARBIT_CRASH,和UNKNOWN

arb_connected显示当前节点是否连接到arbitrator

21.5.10.2 ndbinfo arbitrator_validity_summary表

arbitrator_validity_summary表提供了仲裁者关于集群数据节点的综合视图。

下表提供了有关表中列的信息arbitrator_validity_summary对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.350 arbitrator_validity_summary表的列

列名称 类型 描述
arbitrator 整数 仲裁员的节点ID
arb_ticket 用于跟踪仲裁的内部标识符
arb_connected Yes 要么 No 仲裁器是否连接到集群
consensus_count 整数 将此节点视为仲裁者的数据节点的数量

在正常的操作中,这张表应该只有1行,任何可观的时间长度。如果它的行数超过一个数量级,那么要么不是所有节点都连接到仲裁器,要么所有节点都连接,但不同意仲裁器。

arbitrator列显示仲裁者的节点ID。

arb_ticket 是该仲裁员使用的内部标识符。

arb_connected 显示此节点是否作为仲裁者连接到群集。

21.5.10.3 ndbinfo阻止表

blocks表是一个静态表,它只包含所有NDB内核块的名称和内部标识(请参阅NDB内核块)。它被其他 ndbinfo表格(其中大部分实际上是视图)用于将块号映射到用于生成人类可读输出的块名称。

下表提供了有关表中列的信息blocks对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.351块表的列

列名称 类型 描述
block_number 整数 块号
block_name 块名称

要获得所有块名称的列表,只需执行 SELECT block_name FROM ndbinfo.blocks尽管这是一个静态表,但其内容可能因不同的NDB集群版本而异。

21.5.10.4 ndbinfo cluster_locks表

cluster_locks表提供了有关当前锁请求的信息,请求持有并等待NDBNDB群集中的表的,并且是作为其配套表 cluster_operationscluster_locks 表中获得的信息可能有助于调查失速和死锁。

下表提供了有关表中列的信息cluster_locks对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.352 cluster_locks表的列

列名称 类型 描述
node_id 整数 报告节点的ID
block_instance 整数 报告LDM实例的ID
tableid 整数 包含此行的表的ID
fragmentid 整数 包含锁定行的片段的ID
rowid 整数 锁定行的ID
transid 整数 交易ID
mode 锁定请求模式
state 锁定状态
detail 这是否是第一次在行锁定队列中持有锁
op 操作类型
duration_millis 整数 等待或保持锁定的毫秒数
lock_num 整数 锁定对象的ID
waiting_for 整数 用这个ID等待锁定

表ID(tableid列)在内部分配,与其他ndbinfo中使用的相同 它也显示在ndb_show_tables的输出中

事务ID(transid列)是由NDB API为请求或持有当前锁的事务生成的标识符。

mode列显示锁定模式; 这总是S(指示共享锁)或 X(独占锁)之一。如果一个事务在给定的行上持有排它锁,则该行上的所有其他锁具有相同的事务ID。

state列显示锁定状态。它的价值永远是H(持有)或 W(等待)之一。等待锁定请求等待由另一个事务持有的锁定。

detail列包含 *(星号字符)时,这意味着此锁定是受影响行的锁定队列中的第一个锁定锁定; 否则,此列为空。该信息可用于帮助识别锁定请求列表中的唯一条目。

op列显示请求锁定的操作类型。这始终是一个值 READINSERTUPDATEDELETESCAN,或REFRESH

duration_millis列显示此锁定请求一直等待或持有锁定的毫秒数。当为一个等待请求授予一个锁时,它被重置为0。

锁ID(lockid列)对于此节点和块实例是唯一的。

锁定状态显示在lock_state 列中; 如果是W,则该锁正在等待被授予,并且该waiting_for列显示该请求正在等待的锁对象的锁ID。否则,该waiting_for列是空的。 waiting_for只能引用锁在同一行,所确定node_idblock_instancetableidfragmentid,和rowid

cluster_locks表在NDB 7.5.3中添加。

21.5.10.5 ndbinfo cluster_operations表

cluster_operations从本地数据管理(LQH)块的角度来看,表提供了NDB群集中所有活动的每个操作(有状态主键操作)视图(请参阅 DBLQH块)。

下表提供了有关表中列的信息cluster_operations对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.353 cluster_operations表的列

列名称 类型 描述
node_id 整数 报告LQH块的节点ID
block_instance 整数 LQH块实例
transid 整数 交易ID
operation_type 操作类型(请参阅文本以了解可能的值)
state 操作状态(请参阅文本了解可能的值)
tableid 整数 表ID
fragmentid 整数 片段ID
client_node_id 整数 客户端节点ID
client_block_ref 整数 客户端块参考
tc_node_id 整数 事务协调器节点ID
tc_block_no 整数 交易协调员区号
tc_block_instance 整数 事务协调器块实例

事务ID是唯一的64位数字,可以使用NDB API的 getTransactionId() 方法获得。(目前,MySQL服务器不公开正在进行的事务的NDB API事务ID。)

所述operation_type列可以采取的值的任一个READREAD-SHREAD-EXINSERTUPDATEDELETEWRITEUNLOCKREFRESHSCANSCAN-SHSCAN-EX,或 <unknown>

state柱可以具有的值中的任何一个ABORT_QUEUEDABORT_STOPPEDCOMMITTEDCOMMIT_QUEUEDCOMMIT_STOPPEDCOPY_CLOSE_STOPPEDCOPY_FIRST_STOPPEDCOPY_STOPPEDCOPY_TUPKEYIDLELOG_ABORT_QUEUEDLOG_COMMIT_QUEUEDLOG_COMMIT_QUEUED_WAIT_SIGNALLOG_COMMIT_WRITTENLOG_COMMIT_WRITTEN_WAIT_SIGNALLOG_QUEUEDPREPAREDPREPARED_RECEIVED_COMMITSCAN_CHECK_STOPPEDSCAN_CLOSE_STOPPEDSCAN_FIRST_STOPPEDSCAN_RELEASE_STOPPEDSCAN_STATE_USEDSCAN_STOPPEDSCAN_TUPKEYSTOPPEDTC_NOT_CONNECTEDWAIT_ACCWAIT_ACC_ABORTWAIT_AI_AFTER_ABORTWAIT_ATTRWAIT_SCAN_AIWAIT_TUPWAIT_TUPKEYINFOWAIT_TUP_COMMIT,或 WAIT_TUP_TO_ABORT(如果MySQL服务器在ndbinfo_show_hidden启用的情况下运行 ,您可以通过从ndb$dblqh_tcconnect_state通常隐藏表中选择来查看这个状态列表 。)

您可以NDB通过检查ndb_show_tables的输出来从表ID中获取的名称

fragid与在ndb_desc --extra-partition-info(简式-p输出中看到的分区号相同

client_node_id和中 client_block_refclient 指的是NDB群集API或SQL节点(即NDB API客户端或连接到群集的MySQL服务器)。

block_instancetc_block_instance柱提供,分别为DBLQHDBTC块实例号。您可以将这些与块名称一起使用,以获取有关threadblocks表中特定线程的信息

21.5.10.6 ndbinfo cluster_transactions表

cluster_transactions表显示有关NDB群集中所有正在进行的事务的信息。

下表提供了有关表中列的信息cluster_transactions对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.354 cluster_transactions表的列

列名称 类型 描述
node_id 整数 事务协调器的节点ID
block_instance 整数 TC块实例
transid 整数 交易ID
state 操作状态(请参阅文本了解可能的值)
count_operations 整数 事务中有状态的主键操作的数量(包括带锁的读取以及DML操作)
outstanding_operations 整数 仍在本地数据管理块中执行操作
inactive_seconds 整数 花时间等待API
client_node_id 整数 客户端节点ID
client_block_ref 整数 客户端块参考

事务ID是唯一的64位数字,可以使用NDB API的 getTransactionId() 方法获得。(目前,MySQL服务器不公开正在进行的事务的NDB API事务ID。)

block_instance指的是内核块的一个实例。与块名称一起,可以使用此编号查找threadblocks表中的给定实例

state柱可以具有的值中的任何一个CS_ABORTINGCS_COMMITTINGCS_COMMIT_SENTCS_COMPLETE_SENTCS_COMPLETINGCS_CONNECTEDCS_DISCONNECTEDCS_FAIL_ABORTEDCS_FAIL_ABORTINGCS_FAIL_COMMITTEDCS_FAIL_COMMITTINGCS_FAIL_COMPLETEDCS_FAIL_PREPAREDCS_PREPARE_TO_COMMITCS_RECEIVINGCS_REC_COMMITTINGCS_RESTARTCS_SEND_FIRE_TRIG_REQCS_STARTEDCS_START_COMMITTINGCS_START_SCANCS_WAIT_ABORT_CONFCS_WAIT_COMMIT_CONFCS_WAIT_COMPLETE_CONFCS_WAIT_FIRE_TRIG_REQ(如果MySQL服务器在ndbinfo_show_hidden启用的情况下运行 ,您可以通过选择来查看这个状态列表 ndb$dbtc_apiconnect_state 表,这通常是隐藏的。)

client_node_id和中 client_block_refclient 指的是NDB群集API或SQL节点(即NDB API客户端或连接到群集的MySQL服务器)。

tc_block_instance列提供 DBTC块实例编号。您可以将其与块名一起使用,以获取有关threadblocks 表中特定线程的信息

21.5.10.7 ndbinfo config_nodes表

config_nodes表显示了在NDB群集config.ini文件中配置的节点对于每个节点,该表显示包含节点ID,节点类型(管理节点,数据节点或API节点)以及节点配置为运行的主机的名称或IP地址的行。

该表并不表示给定节点是否实际正在运行,或者当前是否连接到群集。有关连接到NDB群集的节点的信息可以从nodesprocesses表中获取。

下表提供了有关表中列的信息config_nodes对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.355 config_params表的列

列名称 类型 描述
node_id 整数 节点的ID
node_type 节点的类型
node_hostname 节点所在主机的名称或IP地址

node_id列显示该节点的config.ini文件中使用的节点ID ; 如果没有指定,则显示将自动分配给此节点的节点ID。

node_type列显示以下三个值之一:

  • MGM:管理节点。

  • NDB:数据节点。

  • API:API节点; 这包括SQL节点。

node_hostname列显示config.ini文件中指定的节点主机如果HostName尚未在群集配置文件中设置,则这对于API节点可能为空 如果 HostName尚未在配置文件中为数据节点设置, localhost则在此处使用。 localhost如果HostName还没有为管理节点指定,也会使用它

config_nodes表在NDB 7.5.7和NDB 7.6.2中添加。

21.5.10.8 ndbinfo config_params表

config_params表是一个静态表,它提供了有关NDB群集配置参数的名称和内部ID号以及其他信息。

下表提供了有关表中列的信息config_params对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。该表格还可以与config_values表格一起使用, 以获取有关节点配置参数的实时信息。

表21.356 config_params表的列

列名称 类型 描述
param_number 整数 该参数的内部ID号
param_name 参数的名称
param_description 参数的简要说明
param_type 参数的数据类型
param_default 该参数的默认值(如果有的话)
param_min 该参数的最大值,如果有的话
param_max 该参数的最小值,如果有的话
param_mandatory 整数 如果参数是必需的,则为1,否则为0
param_status 目前尚未使用

在NDB Cluster 7.5(及更高版本)中,此表是只读的。param_descriptionparam_typeparam_defaultparam_minparam_maxparam_mandatory,和 param_status列NDB 7.5.0全部加入。

尽管这是一个静态表,但其内容可能因NDB群集安装而异,因为受软件版本,群集硬件配置和其他因素之间的差异支持的参数可能会有所不同。

21.5.10.9 ndbinfo config_values表

config_values表在NDB 7.5.0中实现,提供有关节点配置参数值当前状态的信息。表中的每一行对应给定节点上参数的当前值。

表21.357 config_params表的列

列名称 类型 描述
node_id 整数 集群中节点的ID
config_param 整数 该参数的内部ID号
config_value 参数的当前值

该表格的config_param列和 config_params表格的 param_number列使用相同的参数标识符。通过连接这些列上的两个表,您可以获得有关所需节点配置参数的详细信息。此处显示的查询提供了群集中每个数据节点上所有参数的当前值,按节点ID和参数名称排序:

SELECT v.node_id AS'Node Id', 
          p.param_name AS'参数', 
          v.config_value AS'Value'
FROM config_values v
加入config_params p
ON v.config_param = p.param_number
WHERE p.param_name NOT LIKE'\ _ \ _%'
ORDER BY v.node_id,p.param_name;

在用于简单测试的小示例群集上运行时,上一个查询的部分输出:

+ --------- + --------------------------------------- --- + ---------------- +
| 节点ID | 参数| 值|
+ --------- + --------------------------------------- --- + ---------------- +
| 2 | 仲裁| 1 |
| 2 | 仲裁时间| 7500 |
| 2 | BackupDataBufferSize | 16777216 |
| 2 | BackupDataDir | / home / jon / data |
| 2 | BackupDiskWriteSpeedPct | 50 |
| 2 | BackupLogBufferSize | 16777216 |

...

| 3 | TotalSendBufferMemory | 0 |
| 3 | TransactionBufferMemory | 1048576 |
| 3 | TransactionDeadlockDetectionTimeout | 1200 |
| 3 | TransactionInactiveTimeout | 4294967039 |
| 3 | TwoPassInitialNodeRestartCopy | 0 |
| 3 | UndoDataBuffer | 16777216 |
| 3 | UndoIndexBuffer | 2097152 |
+ --------- + --------------------------------------- --- + ---------------- +
整套248行(0.02秒)

WHERE子句过滤掉名称以双下划线(__开头的参数; 这些参数仅供NDB开发人员进行测试和其他内部使用,不适用于生产NDB群集。

您可以通过发出适当的查询来获得更具体,更详细或两者兼有的输出。本实施例提供的所有类型的关于可用的信息 NodeIdNoOfReplicasHostNameDataMemoryIndexMemory,和 TotalSendBufferMemory 参数作为当前设置为集群中的所有数据节点:

SELECT p.param_name AS Name,
        v.node_id AS节点,
        p.param_type AS类型,
        p.param_default AS'默认',
        p.param_min AS最小值,
        p.param_max AS最大值,
        CASE p.param_mandatory WHEN 1 THEN'Y'ELSE'N'END AS'Required',
        v.config_value AS当前
FROM config_params p
加入config_values v
ON p.param_number = v.config_param
在哪里。PARAM_NAME
  IN('NodeId','NoOfReplicas','HostName',
      'DataMemory','IndexMemory','TotalSendBufferMemory')\ G

此查询的输出在具有2个用于简单测试的数据节点的小型NDB群集上运行时显示在此处:

*************************** 1. row ******************** *******
    名称:NodeId
    节点:2
    类型:无符号
 默认: 
 最低:1
 最大:48
要求:是
 当前:2
*************************** 2. row ******************** *******
    名称:HostName
    节点:2
    类型:字符串
 默认:localhost
 最低: 
 最大: 
要求:N
 当前:127.0.0.1
*************************** 3. row ******************** *******
    名称:TotalSendBufferMemory
    节点:2
    类型:无符号
 默认值:0
 最低:262144
 最大:4294967039
要求:N
 当前:0
*************************** 4. row ******************** *******
    名称:NoOfReplicas
    节点:2
    类型:无符号
 默认值:2
 最低:1
 最大:4
要求:N
 当前:2
*************************** 5. row ******************** *******
    名称:DataMemory
    节点:2
    类型:无符号
 默认值:102760448
 最低:1048576
 最大:1099511627776
要求:N
 当前:524288000
*************************** 6. row ******************** *******
    名称:NodeId
    节点:3
    类型:无符号
 默认: 
 最低:1
 最大:48
要求:是
 当前:3
*************************** 7. row ******************** *******
    名称:HostName
    节点:3
    类型:字符串
 默认:localhost
 最低: 
 最大: 
要求:N
 当前:127.0.0.1
*************************** 8. row ******************** *******
    名称:TotalSendBufferMemory
    节点:3
    类型:无符号
 默认值:0
 最低:262144
 最大:4294967039
要求:N
 当前:0
*************************** 9. row ******************** *******
    名称:NoOfReplicas
    节点:3
    类型:无符号
 默认值:2
 最低:1
 最大:4
要求:N
 当前:2
*************************** 10. row ******************** *******
    名称:DataMemory
    节点:3
    类型:无符号
 默认值:102760448
 最低:1048576
 最大:1099511627776
要求:N
 当前:524288000
10行(0.01秒)

21.5.10.10 ndbinfo计数器表

counters表提供了事件的运行总计,例如特定内核块和数据节点的读取和写入。计数从最近的节点启动或重新启动; 节点启动或重新启动将重置该节点上的所有计数器。并非所有的内核块都有各种类型的计数器。

下表提供了有关表中列的信息counters对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.358柜台表的列

列名称 类型 描述
node_id 整数 数据节点ID
block_name 关联的NDB内核块的名称(请参阅 NDB内核块)。
block_instance 整数 阻止实例
counter_id 整数 柜台的内部ID号码; 通常是1到10之间的整数,包括1和10。
counter_name 柜台的名称。有关各个计数器的名称以及每个计数器关联的NDB内核块,请参阅文本。
val 整数 柜台的价值

每个计数器都与特定的NDB内核块关联。

OPERATIONS计数器与DBLQH(本地查询处理程序)内核块关联 (请参阅 DBLQH块)。主键读取算作一个操作,主键更新也是如此。对于读取,在DBLQH每个操作中 有一个操作 DBTC对于写入,每个副本有一个操作计数。

ATTRINFOTRANSACTIONSCOMMITSREADSLOCAL_READSSIMPLE_READSWRITESLOCAL_WRITESABORTSTABLE_SCANS,和 RANGE_SCANS计数器与DBTC(事务协调员)内核块(参见相关 的DBTC块)。

LOCAL_WRITES并且 LOCAL_READS是在也保存记录的主要副本的节点中使用事务协调器的主键操作。

READS计数器包括所有读取。 LOCAL_READS仅包括与该事务协调器在同一节点上的主副本的读取。SIMPLE_READS只包含那些读取操作是给定事务的开始和结束操作的读取。简单读取不保留锁,但是是事务的一部分,因为它们观察到由包含它们的事务所做的未提交的更改,但未观察到任何其他未提交的事务。这种读法是 简单的从TC块的角度来看, ; 因为他们没有锁,他们不耐用,一次 DBTC已将它们发送到相关的LQH块,它对它们没有任何状态。

ATTRINFO保持解释程序发送到数据节点的次数。请参阅 NDB协议消息,以获取有关内核中ATTRINFO消息的 更多信息NDB

LOCAL_TABLE_SCANS_SENTREADS_RECEIVEDPRUNED_RANGE_SCANS_RECEIVEDRANGE_SCANS_RECEIVEDLOCAL_READS_SENTCONST_PRUNED_RANGE_SCANS_RECEIVEDLOCAL_RANGE_SCANS_SENTREMOTE_READS_SENTREMOTE_RANGE_SCANS_SENTREADS_NOT_FOUNDSCAN_BATCHES_RETURNEDTABLE_SCANS_RECEIVED,和 SCAN_ROWS_RETURNED柜台与关联DBSPJ(选择下推加入)内核模块(见的DBSPJ块)。

block_nameblock_instance列分别提供适用的NDB内核模块名称和实例号。您可以使用它们从threadblocks表中获取有关特定线程的信息

许多计数器在排除此类问题时提供有关传输器过载和发送缓冲区大小的信息。对于每个LQH实例,以下列表中的每个计数器都有一个实例:

  • LQHKEY_OVERLOAD:由于传输器过载而在LQH块实例中拒绝的主键请求数

  • LQHKEY_OVERLOAD_TCLQHKEY_OVERLOADTC节点传输器过载 的实例计数

  • LQHKEY_OVERLOAD_READERLQHKEY_OVERLOADAPI读取器(只读)节点超载的实例计数

  • LQHKEY_OVERLOAD_NODE_PEERLQHKEY_OVERLOAD下一个备份数据节点(仅写入)超载 的实例计数

  • LQHKEY_OVERLOAD_SUBSCRIBERLQHKEY_OVERLOAD事件订阅者(仅写入)超载的实例计数

  • LQHSCAN_SLOWDOWNS:由于扫描API传输器过载而导致碎片扫描批次大小减少的实例计数。

21.5.10.11 ndbinfo cpustat表

cpustat表提供了针对NDB内核中运行的每个线程每秒收集的每线程CPU统计信息

下表提供了有关表中列的信息cpustat对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.359 cpustat表的列

列名称 类型 描述
node_id 整数 线程正在运行的节点的ID
thr_no 整数 线程标识(特定于此节点)
OS_user 整数 OS用户时间
OS_system 整数 OS系统时间
OS_idle 整数 OS空闲时间
thread_exec 整数 线程执行时间
thread_sleeping 整数 线程休眠时间
thread_send 整数 线程发送时间
thread_buffer_full 整数 线程缓冲区全时
elapsed_time 整数 经过的时间

该表在NDB 7.5.2中添加。

21.5.10.12 ndbinfo cpustat_50ms表

cpustat_50ms表提供了在NDB内核中运行的每个线程每50毫秒获得的原始每线程CPU数据

cpustat_1seccpustat_20sec,该表显示了每个螺纹20个的测量台,每个引用一个周期指定的持续时间。因此,cpsustat_50ms 提供了1秒的历史。

下表提供了有关表中列的信息cpustat_50ms对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.360 cpustat_50ms表的列

列名称 类型 描述
node_id 整数 线程正在运行的节点的ID
thr_no 整数 线程标识(特定于此节点)
OS_user_time 整数 OS用户时间
OS_system_time 整数 OS系统时间
OS_idle_time 整数 OS空闲时间
exec_time 整数 线程执行时间
sleep_time 整数 线程休眠时间
send_time 整数 线程发送时间
buffer_full_time 整数 线程缓冲区全时
elapsed_time 整数 经过的时间

该表在NDB 7.5.2中添加。

21.5.10.13 ndbinfo cpustat_1sec表

cpustat-1sec表为每个在NDB内核中运行的线程提供每秒获得的原始每线程CPU数据

cpustat_50mscpustat_20sec,该表显示了每个螺纹20个的测量台,每个引用一个周期指定的持续时间。因此,cpsustat_1sec 提供了20秒的历史。

下表提供了有关表中列的信息cpustat_1sec对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.361 cpustat_1sec表的列

列名称 类型 描述
node_id 整数 线程正在运行的节点的ID
thr_no 整数 线程标识(特定于此节点)
OS_user_time 整数 OS用户时间
OS_system_time 整数 OS系统时间
OS_idle_time 整数 OS空闲时间
exec_time 整数 线程执行时间
sleep_time 整数 线程休眠时间
send_time 整数 线程发送时间
buffer_full_time 整数 线程缓冲区全时
elapsed_time 整数 经过的时间

该表在NDB 7.5.2中添加。

21.5.10.14 ndbinfo cpustat_20sec表

cpustat_20sec表为每个在NDB内核中运行的线程提供每20秒获得的原始每线程CPU数据

cpustat_50mscpustat_1sec,该表显示了每个螺纹20个的测量台,每个引用一个周期指定的持续时间。因此,cpsustat_20sec提供了400秒的历史。

下表提供了有关表中列的信息cpustat_20sec对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.362 cpustat_20sec表的列

列名称 类型 描述
node_id 整数 线程正在运行的节点的ID
thr_no 整数 线程标识(特定于此节点)
OS_user_time 整数 OS用户时间
OS_system_time 整数 OS系统时间
OS_idle_time 整数 OS空闲时间
exec_time 整数 线程执行时间
sleep_time 整数 线程休眠时间
send_time 整数 线程发送时间
buffer_full_time 整数 线程缓冲区全时
elapsed_time 整数 经过的时间

该表在NDB 7.5.2中添加。

21.5.10.15 ndbinfo dict_obj_info表

dict_obj_info表提供有关NDB数据字典(DICT)对象(如表和索引)的信息。dict_obj_types可以查询表中所有类型的列表。)该信息包括对象的类型,状态,父对象(如果有)以及完全限定名称。

下表提供了有关表中列的信息dict_obj_info对于每列,表格显示名称,数据类型和简要说明。

表21.363 dict_obj_info表的列

列名称 类型 描述
type 整数 DICT物体的类型; 加入 dict_obj_types获取名称
id 整数 对象标识符
version 整数 对象版本
state 整数 对象状态
parent_obj_type 整数 父对象的类型(dict_obj_types类型ID); 0表示该对象没有父对象
parent_obj_id 整数 父对象ID(例如基表); 0表示该对象没有父对象
fq_name 完全限定的对象名称; 对于一个表格,这有一个形式 ,对于一个主键,形式是 ,对于一个唯一的键 database_name/def/table_namesys/def/table_id/PRIMARYsys/def/table_id/uk_name$unique

该表在NDB 7.5.4中添加。

21.5.10.16 ndbinfo dict_obj_types表

dict_obj_types表是一个静态表,列出了NDB内核中使用的可能的字典对象类型。这些是Object::Type在NDB API中定义的相同类型

下表提供了有关表中列的信息dict_obj_types对于每列,表格显示名称,数据类型和简要说明。

表21.364 dict_obj_types表的列

列名称 类型 描述
type_id 整数 此类型的类型ID
type_name 这种类型的名称

21.5.10.17 ndbinfo disk_write_speed_base表

disk_write_speed_base表提供有关LCP,备份和还原操作期间磁盘写入速度的基本信息。

下表提供了有关表中列的信息disk_write_speed_base对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.365 disk_write_speed_base表的列

列名称 类型 描述
NODE_ID 整数 此节点的节点ID
thr_no 整数 此LDM线程的线程标识
millis_ago 整数 本报告期结束后的毫秒数
millis_passed 整数 本报告期间已过去毫秒
backup_lcp_bytes_written 整数 在此期间由本地检查点和备份进程写入磁盘的字节数
redo_bytes_written 整数 在此期间写入REDO日志的字节数
target_disk_write_speed 整数 每个LDM线程的磁盘写入实际速度(基础数据)

21.5.10.18 ndbinfo disk_write_speed_aggregate表

disk_write_speed_aggregate表提供有关LCP,备份和还原操作期间磁盘写入速度的汇总信息。

下表提供了有关表中列的信息disk_write_speed_aggregate对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.366 disk_write_speed_aggregate表中的列

列名称 类型 描述
NODE_ID 整数 此节点的节点ID
thr_no 整数 此LDM线程的线程标识
backup_lcp_speed_last_sec 整数 备份和LCP进程在最后一秒写入磁盘的字节数
redo_speed_last_sec 整数 在最后一秒写入REDO日志的字节数
backup_lcp_speed_last_10sec 整数 通过备份和LCP进程每秒写入磁盘的字节数,在过去的10秒内平均
redo_speed_last_10sec 整数 每秒写入REDO日志的字节数,最近10秒内的平均值
std_dev_backup_lcp_speed_last_10sec 整数 通过备份和LCP进程每秒写入磁盘的字节数的标准偏差,在过去的10秒内平均
std_dev_redo_speed_last_10sec 整数 每秒写入REDO日志的字节数标准偏差,在过去的10秒内平均
backup_lcp_speed_last_60sec 整数 通过备份和LCP进程每秒写入磁盘的字节数,在最近60秒内平均
redo_speed_last_60sec 整数 每秒写入REDO日志的字节数,最近10秒内的平均值
std_dev_backup_lcp_speed_last_60sec 整数 通过备份和每秒LCP进程写入磁盘的字节数的标准偏差,在最近60秒内平均
std_dev_redo_speed_last_60sec 整数 每秒写入REDO日志的字节数标准偏差,在最近60秒内平均
slowdowns_due_to_io_lag 整数 由于REDO日志I / O滞后,磁盘写入从最后一次节点启动以来的秒数减少
slowdowns_due_to_high_cpu 整数 自上次节点启动以来,由于CPU使用率过高,磁盘写入速度减慢的秒数
disk_write_speed_set_to_min 整数 磁盘写入速度设置为最小值后自上次节点启动以来的秒数
current_target_disk_write_speed 整数 每个LDM线程的磁盘写入实际速度(聚合)

21.5.10.19 ndbinfo disk_write_speed_aggregate_node表

disk_write_speed_aggregate_node表为每个节点提供有关LCP,备份和还原操作期间磁盘写入速度的汇总信息。

下表提供了有关表中列的信息disk_write_speed_aggregate_node对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.367 disk_write_speed_aggregate_node表的列

列名称 类型 描述
NODE_ID 整数 此节点的节点ID
backup_lcp_speed_last_sec 整数 备份和LCP进程在最后一秒写入磁盘的字节数
redo_speed_last_sec 整数 在最后一秒写入REDO日志的字节数
backup_lcp_speed_last_10sec 整数 通过备份和LCP进程每秒写入磁盘的字节数,在过去的10秒内平均
redo_speed_last_10sec 整数 每秒写入REDO日志的字节数,最近10秒内的平均值
backup_lcp_speed_last_60sec 整数 通过备份和LCP进程每秒写入磁盘的字节数,在最近60秒内平均
redo_speed_last_60sec 整数 通过备份和LCP进程每秒写入磁盘的字节数,在最近60秒内平均

21.5.10.20 ndbinfo diskpagebuffer表

diskpagebuffer表提供有关NDB Cluster Disk Data表的磁盘页面缓冲区使用情况的统计信息。

下表提供了有关表中列的信息diskpagebuffer对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.368 diskpagebuffer表的列

列名称 类型 描述
node_id 整数 数据节点ID
block_instance 整数 阻止实例
pages_written 整数 写入磁盘的页数。
pages_written_lcp 整数 本地检查点写入的页数。
pages_read 整数 从磁盘读取的页数
log_waits 整数 等待日志写入磁盘的页面写入次数
page_requests_direct_return 整数 缓冲区中可用页面的请求数
page_requests_wait_queue 整数 必须等待页面在缓冲区中可用的请求数
page_requests_wait_io 整数 必须从磁盘上的页面读取的请求数量(页面在缓冲区中不可用)

您可以将此表与NDB群集磁盘数据表一起使用,以确定是否 DiskPageBufferMemory足够大以允许从缓冲区而不是从磁盘读取数据; 最小化磁盘搜索可以帮助提高这些表的性能。

您可以DiskPageBufferMemory使用诸如此类的查询来确定读取的比例,以读取 的总数为单位,以百分比的形式获取此比例:

选择
  NODE_ID,
  100 * page_requests_direct_return /
    (page_requests_direct_return + page_requests_wait_io)
      AS hit_ratio
FROM ndbinfo.diskpagebuffer;

此查询的结果应与此处显示的结果相似,集群中每个数据节点都有一行(在本例中,集群有4个数据节点):

+ --------- + ----------- +
| node_id | hit_ratio |
+ --------- + ----------- +
| 5 | 97.6744 |
| 6 | 97.6879 |
| 7 | 98.1776 |
| 8 | 98.1343 |
+ --------- + ----------- +
4行(0.00秒)

hit_ratio值接近100%表明只有极少数的读取是从磁盘而不是缓冲区读取的,这意味着磁盘数据读取性能接近最佳水平。如果这些值中的任何一个小于95%,这是一个强烈的指示器,DiskPageBufferMemory 需要在config.ini 文件中增加该设置

注意

更改 DiskPageBufferMemory 需要滚动重新启动所有群集的数据节点才能生效。

block_instance指的是内核块的一个实例。与块名称一起,可以使用此编号查找threadblocks表中的给定实例 使用这些信息,您可以获得有关各个线程的磁盘页面缓冲区度量标准的信息; 这里显示了使用LIMIT 1将输出限制为单个线程的示例查询

的MySQL> SELECT 
     >    node_id, thr_no, block_name, thread_name, pages_written,
     >    pages_written_lcp, pages_read, log_waits,
     >    page_requests_direct_return, page_requests_wait_queue,
     >    page_requests_wait_io
     > FROM ndbinfo.diskpagebuffer
     >    INNER JOIN ndbinfo.threadblocks USING (node_id, block_instance)
     >    INNER JOIN ndbinfo.threads USING (node_id, thr_no)
     >WHERE block_name = 'PGMAN' LIMIT 1\G
*************************** 1. row ******************** *******
                    node_id:1
                     thr_no:1
                 block_name:PGMAN
                thread_name:rep
              pages_written:0
          pages_written_lcp:0
                 pages_read:1
                  log_waits:0
page_requests_direct_return:4
   page_requests_wait_queue:0
      page_requests_wait_io:1
一排(0.01秒)

21.5.10.21 ndbinfo error_messages表

error_messages表提供了有关的信息

下表提供了有关表中列的信息error_messages对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.369 error_messages表的列

列名称 类型 描述
error_code 整数 数字错误代码
error_description 错误描述
error_status 错误状态码
error_classification 整数 错误分类代码

error_code是一个数字NDB错误代码。这是可以提供给ndb_perrorperror的 错误代码 --ndb

error_description 提供导致错误的条件的基本描述。

error_status列提供与错误有关的状态信息。此列可能的值在此处列出:

  • No error

  • Illegal connect string

  • Illegal server handle

  • Illegal reply from server

  • Illegal number of nodes

  • Illegal node status

  • Out of memory

  • Management server not connected

  • Could not connect to socket

  • Start failed

  • Stop failed

  • Restart failed

  • Could not start backup

  • Could not abort backup

  • Could not enter single user mode

  • Could not exit single user mode

  • Failed to complete configuration change

  • Failed to get configuration

  • Usage error

  • Success

  • Permanent error

  • Temporary error

  • Unknown result

  • Temporary error, restart node

  • Permanent error, external action needed

  • Ndbd file system error, restart node initial

  • Unknown

error_classification列显示错误分类。有关分类代码及其含义的信息,请参见NDB错误分类

error_messages表在NDB 7.6.4中添加。

21.5.10.22 ndbinfo locks_per_fragment表

locks_per_fragment表提供了有关锁定要求的请求数,并在每个片段依据这些请求的结果的信息,作为一个伴侣表 operations_per_fragmentmemory_per_fragment此表还显示自从创建片段或表后或自最近重新启动以来等待锁成功和失败的总时间。

下表提供了有关表中列的信息locks_per_fragment对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.370 locks_per_fragment表的列

列名称 类型 描述
fq_name 完全合格的表名
parent_fq_name 父对象的完全限定名称
type 桌子类型; 请参阅文本了解可能的值
table_id 整数 表ID
node_id 整数 报告节点ID
block_instance 整数 LDM实例ID
fragment_num 整数 片段标识符
ex_req 整数 独占锁请求已启动
ex_imm_ok 整数 立即授予独占锁请求
ex_wait_ok 整数 在等待后授予独占锁定请求
ex_wait_fail 整数 独占锁请求未被授予
sh_req 整数 共享锁请求已启动
sh_imm_ok 整数 立即授予共享锁请求
sh_wait_ok 整数 在等待后授予共享锁请求
sh_wait_fail 整数 未授予共享锁请求
wait_ok_millis 整数 花在等待授予的锁请求上的时间,以毫秒为单位
wait_fail_millis 整数 等待失败的锁请求花费的时间,以毫秒为单位

block_instance指的是内核块的一个实例。与块名称一起,可以使用此编号查找threadblocks表中的给定实例

fq_namedatabase/ schemaname 格式的完全限定数据库对象名称 ,如test/def/t1sys/def/10/b$unique

parent_fq_name 是此对象的父对象(表)的完全限定名称。

table_id是由表生成的表的内部ID NDB这与其他ndbinfo表中显示的内部表ID相同; 它也可以在ndb_show_tables的输出中 看到

type列显示表格的类型。这始终是一个System tableUser tableUnique hash indexHash indexUnique ordered indexOrdered indexHash index triggerSubscription triggerRead only constraintIndex triggerReorganize triggerTablespaceLog file groupData fileUndo fileHash mapForeign key definitionForeign key parent triggerForeign key child trigger,或Schema transaction

在所有的列中显示的值 ex_reqex_req_imm_okex_wait_okex_wait_failsh_reqsh_req_imm_oksh_wait_ok,和 sh_wait_fail代表请求的累积数量,因为表或片段的创建,或因为此节点的最后重新启动,无论这些后来发生。对于wait_ok_milliswait_fail_millis列中显示的时间值也是如此

每个锁定请求都被视为正在进行,或者以某种方式完成(即成功或失败)。这意味着以下关系是正确的:

ex_req> =(ex_req_imm_ok + ex_wait_ok + ex_wait_fail)

sh_req> =(sh_req_imm_ok + sh_wait_ok + sh_wait_fail)

当前正在进行的请求的数量是当前不完整的请求数量,可以在这里找到:

[独占锁定请求正在进行中] =
    ex_req  - (ex_req_imm_ok + ex_wait_ok + ex_wait_fail)

[共享锁定请求正在进行中] =
    sh_req  - (sh_req_imm_ok + sh_wait_ok + sh_wait_fail)

等待失败表示中止事务,但中止可能会或可能不会由锁定等待超时引起。如下所示,您可以在等待锁定时获取中止的总数:

[在等待锁定时中止] = ex_wait_fail + sh_wait_fail

locks_per_fragment表在NDB 7.5.3中添加。

21.5.10.23 ndbinfo logbuffers表

logbuffer表提供有关NDB群集日志缓冲区使用情况的信息。

下表提供了有关表中列的信息logbuffers对于每列,表格显示名称,数据类型和简要说明。

表21.371 logbuffers表中的列

列名称 类型 描述
node_id 整数 这个数据节点的ID。
log_type 日志类型。在NDB 7.6.5之前,以下之一:REDODD-UNDO在NDB 7.6.5或更高版本,之一: REDODD-UNDOBACKUP-DATA,或 BACKUP-LOG
log_id 整数 日志ID。
log_part 整数 日志部件号。
total 整数 此日志可用的总空间。
used 整数 此日志使用的空间。

从NDB 7.6.5开始,logbuffers在执行NDB备份时,可以使用反映另外两种日志类型的表格行。其中一行具有日志类型BACKUP-DATA,该日志类型 显示备份期间将碎片复制到备份文件时使用的数据缓冲区的数量。另一行具有日志类型BACKUP-LOG,该日志类型显示备份期间用于记录备份开始后所做更改的日志缓冲区数量。表中log_type显示了每个这些行中的 logbuffers每个数据节点。除非正在执行NDB备份,否则这些行不存在。(Bug#25822988)

21.5.10.24 ndbinfo logspaces表

此表提供有关NDB群集日志空间使用情况的信息。

下表提供了有关表中列的信息logspaces对于每列,表格显示名称,数据类型和简要说明。

表21.372日志空间表中的列

列名称 类型 描述
node_id 整数 这个数据节点的ID。
log_type 日志类型; 之一:REDODD-UNDO
log_id 整数 日志ID。
log_part 整数 日志部件号。
total 整数 此日志可用的总空间。
used 整数 此日志使用的空间。

21.5.10.25 ndbinfo成员资格表

membership表描述了每个数据节点与集群中所有其他节点的关系,包括节点组成员资格,总裁节点,仲裁者,仲裁者后继者,仲裁者连接状态以及其他信息。

下表提供了有关表中列的信息membership对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.373成员资格表的列

列名称 类型 描述
node_id 整数 此节点的节点ID
group_id 整数 此节点所属的节点组
left node 整数 前一个节点的节点ID
right_node 整数 下一个节点的节点ID
president 整数 总统的节点ID
successor 整数 总统继任者的节点ID
succession_order 整数 此节点成功担任总统职位的顺序
Conf_HB_order 整数 -
arbitrator 整数 仲裁员的节点ID
arb_ticket 用于跟踪仲裁的内部标识符
arb_state 枚举(参见文本) 仲裁状态
arb_connected Yes 要么 No 该节点是否连接到仲裁器
connected_rank1_arbs 节点ID列表 关联一级仲裁员
connected_rank2_arbs 节点ID列表 关联一级仲裁员

节点ID和节点组ID与ndb_mgm -e“SHOW”报告的相同

left_noderight_node 按照连接模型来定义,该模型按照节点ID的顺序连接一个圆圈中的所有数据节点,类似于时钟表盘上的数字排序,如下所示:

图21.24 NDB群集节点的圆形排列

Content is described in the surrounding text.

在这个例子中,我们有8个数据节点,编号为5,6,7,8,12,13,14和15,顺时针排列成一个圆圈。我们从圆圈内部确定 节点5左侧的节点为节点15,节点5右侧的节点为节点6.您可以通过运行以下查询并观察输出来查看所有这些关系:

mysql> SELECT node_id,left_node,right_node
    - >FROM ndbinfo.membership;
+ --------- + ----------- ------------ + +
| node_id | left_node | right_node |
+ --------- + ----------- ------------ + +
| 5 | 15 | 6 |
| 6 | 5 | 7 |
| 7 | 6 | 8 |
| 8 | 7 | 12 |
| 12 | 8 | 13 |
| 13 | 12 | 14 |
| 14 | 13 | 15 |
| 15 | 14 | 5 |
+ --------- + ----------- ------------ + +
集合中的8行(0.00秒)

在事件日志中以相同的方式使用 指定

president节点是当前节点查看的负责设置仲裁器的节点(请参阅 NDB群集启动阶段)。如果总裁失败或断开连接,则当前节点期望successor列中显示其ID的节点成为新总裁。succession_order列显示当前节点将自己视为拥有的连续队列中的位置。

在一个正常的NDB集群中,所有的数据节点都应该看到与它相同的节点president和同一个节点(总统除外)successor另外,现任总裁应该1 按照继任顺序来successor 看待自己2节点应该把自己看成是,等等。

所有节点应显示相同的arb_ticket 值以及相同的arb_state值。可能的arb_state值是 ARBIT_NULLARBIT_INITARBIT_FINDARBIT_PREP1ARBIT_PREP2ARBIT_STARTARBIT_RUNARBIT_CHOOSEARBIT_CRASH,和UNKNOWN

arb_connected显示此节点是否连接到显示为此节点的节点 arbitrator

connected_rank1_arbsconnected_rank2_arbs列,每列显示具有一个0以上仲裁列表 ArbitrationRank等于1,或至2中。

注意

管理节点和API节点都有资格成为仲裁员。

21.5.10.26 ndbinfo memoryusage表

查询此表提供的信息与ndb_mgm 客户端中ALL REPORT MemoryUsage命令提供的信息类似,或者由记录ALL DUMP 1000

下表提供了有关表中列的信息memoryusage对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.374 memoryusage表的列

列名称 类型 描述
node_id 整数 此数据节点的节点标识。
memory_type 其中一个Data memoryIndex memoryLong message buffer
used 整数 此数据节点当前用于数据存储器或索引存储器的字节数。
used_pages 整数 此数据节点当前用于数据存储器或索引存储器的页数; 见文本。
total 整数 此数据节点可用的数据存储器或索引存储器的总字节数; 见文本。
total_pages 整数 此数据节点上可用于数据存储器或索引存储器的内存页总数; 见文本。

total列表示特定数据节点上给定资源(数据存储器或索引存储器)的可用存储器总量(以字节为单位)。该数字应该近似等于config.ini 文件中相应配置参数的设置

假设群集具有节点ID 2个数据节点 56,并且 config.ini文件包含以下内容:

[ndbd默认]
DataMemory = 1G
IndexMemory = 1G

还假设 LongMessageBuffer 配置参数的值允许采用其默认值(64 MB)。

以下查询显示大致相同的值:

mysql> SELECT node_id,memory_type,total
     > FROM ndbinfo.memoryusage;
+ --------- + --------------------- + ------------ +
| node_id | memory_type | 总| |
+ --------- + --------------------- + ------------ +
| 5 | 数据存储器| 1073741824 |
| 5 | 索引内存| 1074003968 |
| 5 | 长消息缓冲区| 67108864 |
| 6 | 数据存储器| 1073741824 |
| 6 | 索引内存| 1074003968 |
| 6 | 长消息缓冲区| 67108864 |
+ --------- + --------------------- + ------------ +
设置6行(0.00秒)

在这种情况下,由于内部舍入total,索引内存列值略高于设置的值 IndexMemory

对于used_pagestotal_pages列,资源以页面为单位进行度量,其大小分别为32K DataMemory和8K IndexMemory对于长消息缓冲存储器,页面大小为256字节。

21.5.10.27 ndbinfo memory_per_fragment表

memory_per_fragment表提供了有关各个片段使用内存的信息。

下表提供了有关表中列的信息memory_per_fragment对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.375 memory_per_fragment表的列

列名称 类型 描述
fq_name 这个片段的名称
parent_fq_name 此片段的父级的名称
类型 物体的类型; 请参阅文本了解可能的值
的table_id 整数 此表格的表格ID
NODE_ID 整数 此节点的节点ID
block_instance 整数 内核块实例ID
fragment_num 整数 片段ID(编号)
fixed_elem_alloc_bytes 整数 分配给固定大小元素的字节数
fixed_elem_free_bytes 整数 分配给固定大小元素的页面中剩余的空闲字节
fixed_elem_size_bytes 整数 每个固定大小元素的长度(以字节为单位)
fixed_elem_count 整数 固定大小元素的数量
fixed_elem_free_count 十进制 固定大小元素的空闲行数
var_elem_alloc_bytes 整数 分配给可变大小元素的字节数
var_elem_free_bytes 整数 分配给可变大小元素的页面中剩余的空闲字节
var_elem_count 整数 可变大小元素的数量
hash_index_alloc_bytes 整数 分配给散列索引的字节数

type从该表中列显示用于该片段(字典对象类型Object::Type中,NDB API中),并且可以在下面的列表中显示的值中的任何一个:

  • 系统表

  • 用户表

  • 独特的散列索引

  • 哈希索引

  • 独特的有序索引

  • 有序索引

  • 哈希索引触发器

  • 订阅触发器

  • 只读约束

  • 索引触发器

  • 重新组织触发器

  • 表空间

  • 日志文件组

  • 数据文件

  • 撤消文件

  • 哈希映射

  • 外键定义

  • 外键父触发器

  • 外键子触发器

  • 模式事务

你也可以通过mysql客户端执行来获得这个列表 SELECT * FROM ndbinfo.dict_obj_types

block_instance列提供NDB内核块实例编号。您可以使用它从threadblocks表中获取有关特定线程的信息

21.5.10.28 ndbinfo节点表

该表包含有关数据节点状态的信息。对于集群中运行的每个数据节点,此表中的相应行提供节点的节点ID,状态和正常运行时间。对于正在启动的节点,它还显示当前的启动阶段。

下表提供了有关表中列的信息nodes对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.376节点表的列

列名称 类型 描述
node_id 整数 数据节点在集群中唯一的节点ID。
uptime 整数 自节点上次启动以来的时间,以秒为单位。
status 数据节点的当前状态; 请参阅文本了解可能的值。
start_phase 整数 如果数据节点正在启动,那么当前的启动阶段。
config_generation 整数 此数据节点上正在使用的群集配置文件的版本。

uptime列显示该节点自上次启动或重新启动以来运行的时间(以秒为单位)。这是一个BIGINT 价值。这个数字包括启动节点实际需要的时间; 换句话说,这个计数器在第一次调用ndbdndbmtd时开始运行; 因此,即使对于尚未完成启动的节点,也uptime可能显示非零值。

status列显示节点的当前状态。这是一个:NOTHINGCMVMISTARTINGSTARTEDSINGLEUSERSTOPPING_1STOPPING_2STOPPING_3,或STOPPING_4状态为时STARTING,您可以在start_phase列中看到当前的开始阶段(请参阅本节后面的内容)。SINGLEUSER显示在status群集处于单用户模式时所有数据节点列中(请参见 第21.5.8节“NDB群集单用户模式”)。看到其中一个STOPPING状态并不一定意味着节点正在关闭,而可能意味着它正在进入一个新的状态; 例如,如果将群集置于单用户模式,则有时可以看到数据节点STOPPING_2在状态变为之前简要地报告其状态SINGLEUSER

start_phase列使用与ndb_mgm客户端 node_id STATUS命令的输出中使用的值相同的值范围 (请参见 第21.5.2节“NDB集群管理客户端中的命令”)。如果该节点当前未启动,则此列显示 0有关具有描述的NDB群集启动阶段的列表,请参见 第21.5.1节“NDB群集启动阶段摘要”

config_generation列显示在每个数据节点上哪个版本的集群配置生效。在执行群集的滚动重启以便更改配置参数时,这非常有用。例如,从以下SELECT语句的输出中 ,可以看到节点3尚未使用最新版本的集群配置(6),尽管节点1,2和4正在这样做:

MySQL的> USE ndbinfo;
数据库改变
MySQL的> SELECT * FROM nodes;
+ --------- + -------- + --------- + ------------- + ------ ------------- +
| node_id | 正常运行时间| 状态| start_phase | config_generation |
+ --------- + -------- + --------- + ------------- + ------ ------------- +
| 1 | 10462 | STARTED | 0 | 6 |
| 2 | 10460 | STARTED | 0 | 6 |
| 3 | 10457 | STARTED | 0 | 5 |
| 4 | 10455 | STARTED | 0 | 6 |
+ --------- + -------- + --------- + ------------- + ------ ------------- +
2排(0.04秒)

因此,对于刚刚显示的情况,应重新启动节点3以完成群集的滚动重新启动。

停止的节点不在本表中考虑。假设您有一个具有4个数据节点(节点ID为1,2,3和4)的NDB群集,并且所有节点都正常运行,则该表包含4行,每个数据节点为1个:

MySQL的> USE ndbinfo;
数据库改变
MySQL的> SELECT * FROM nodes;
+ --------- + -------- + --------- + ------------- + ------ ------------- +
| node_id | 正常运行时间| 状态| start_phase | config_generation |
+ --------- + -------- + --------- + ------------- + ------ ------------- +
| 1 | 11776 | STARTED | 0 | 6 |
| 2 | 11774 | STARTED | 0 | 6 |
| 3 | 11771 | STARTED | 0 | 6 |
| 4 | 11769 | STARTED | 0 | 6 |
+ --------- + -------- + --------- + ------------- + ------ ------------- +
4排(0.04秒)

如果关闭其中一个节点,则只有仍在运行的节点在此SELECT语句的输出中 表示,如下所示:

ndb_mgm> 2 STOP
节点2:启动节点关闭
节点2:节点关机完成。
节点2已关闭。
MySQL的> SELECT * FROM nodes;
+ --------- + -------- + --------- + ------------- + ------ ------------- +
| node_id | 正常运行时间| 状态| start_phase | config_generation |
+ --------- + -------- + --------- + ------------- + ------ ------------- +
| 1 | 11807 | STARTED | 0 | 6 |
| 3 | 11802 | STARTED | 0 | 6 |
| 4 | 11800 | STARTED | 0 | 6 |
+ --------- + -------- + --------- + ------------- + ------ ------------- +
设置3行(0.02秒)

21.5.10.29 ndbinfo operations_per_fragment表

operations_per_fragment表提供关于在单个片段和片段副本上执行的操作的信息,以及有关这些操作的一些结果的信息。

下表提供了有关表中列的信息operations_per_fragment对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.377 operations_per_fragment表的列

列名称 类型 描述
fq_name 这个片段的名称
parent_fq_name 此片段的父级的名称
类型 物体的类型; 请参阅文本了解可能的值
的table_id 整数 此表格的表格ID
NODE_ID 整数 此节点的节点ID
block_instance 整数 内核块实例ID
fragment_num 整数 片段ID(编号)
tot_key_reads 整数 此片段副本的密钥读取总数
tot_key_inserts 整数 此片段副本的密钥插入总数
tot_key_updates 整数 此片段副本的密钥更新总数
tot_key_writes 整数 此片段副本的密钥写入总数
tot_key_deletes 整数 此片段副本的密钥删除总数
tot_key_refs 整数 关键操作的数量被拒绝
tot_key_attrinfo_bytes 整数 所有attrinfo属性的总大小
tot_key_keyinfo_bytes 整数 所有keyinfo属性的总大小
tot_key_prog_bytes 整数 attrinfo属性携带的所有解释程序的总大小
tot_key_inst_exec 整数 解释程序为关键操作执行的指令总数
tot_key_bytes_returned 整数 从关键读取操作返回的所有数据和元数据的总大小
tot_frag_scans 整数 在此片段副本上执行的扫描总数
tot_scan_rows_examined 整数 扫描检查的总行数
tot_scan_rows_returned 整数 返回给客户端的总行数
tot_scan_bytes_returned 整数 返回给客户端的数据和元数据的总大小
tot_scan_prog_bytes 整数 用于扫描操作的解释程序的总大小
tot_scan_bound_bytes 整数 有序索引扫描中使用的所有边界的总大小
tot_scan_inst_exec 整数 为扫描执行的指令总数
tot_qd_frag_scans 整数 扫描此分段副本的次数已排队
conc_frag_scans 整数 此片段副本当前处于活动状态的扫描数(不包括排队扫描)
conc_qd_frag_scans 整数 此片段副本当前正在排队的扫描数目
tot_commits 整数 提交给此片段副本的行更改总数

fq_name包含此片段副本所属的架构对象的全名。这目前有以下格式:

  • 基表: - DbName/def/TblName

  • BLOB 表格: - DbName/def/NDB$BLOB_BaseTblId_ColNo

  • 有序索引: - sys/def/BaseTblId/IndexName

  • 独特索引: - sys/def/BaseTblId/IndexName$unique

$unique为唯一索引显示后缀由mysqld添加; 对于由不同的NDB API客户端应用程序创建的索引,这可能有所不同,或者不存在。

完全限定对象名称所显示的语法是一个内部接口,在将来的发行版中可能会有所更改。

考虑一下t1由以下SQL语句创建和修改的表:

CREATE DATABASE mydb;

使用mydb;

CREATE TABLE t1(
  INT NOT NULL,
  b INT NOT NULL,
  t TEXT NOT NULL,
  主键(b)
)ENGINE = ndbcluster;

CREATE UNIQUE INDEX ix1 ON t1(b)USING HASH;

如果t1分配了表格ID 11,则会生成fq_name如下所示值:

  • 基表: mydb/def/t1

  • BLOB 表: mydb/def/NDB$BLOB_11_2

  • 有序索引(主键): sys/def/11/PRIMARY

  • 独特索引: sys/def/11/ix1$unique

对于索引或BLOB表,该 parent_fq_name列包含 fq_name相应的基表。对于基表,这个列总是NULL

type列显示用于该片段的架构对象类型,它可以采取的值的任何一个 System tableUser tableUnique hash index,或Ordered indexBLOB表格显示为 User table

table_id列的值是在任何给定时间唯一的,但如果相应的对象已被删除可重复使用。使用ndb_show_tables实用程序可以看到相同的ID

block_instance列显示此分段副本所属的LDM实例。您可以使用它从threadblocks表中获取有关特定线程的信息 第一个这样的实例始终编号为0。

由于通常有两个副本,并且假设情况如此,所以每个fragment_num值应该在表中出现两次,位于同一节点组的两个不同数据节点上。

由于NDB不使用有序索引单键访问,计数 tot_key_readstot_key_insertstot_key_updatestot_key_writes,和 tot_key_deletes没有被有序索引操作递增。

注意

在使用时tot_key_writes,应该记住,如果键存在,则在此上下文中的写入操作会更新该行,否则将插入新行。(其中一个用途是在NDB执行 REPLACESQL语句中。)

tot_key_refs列显示LDM拒绝的键操作次数。通常,这样的拒绝是由于重复的键(插入),键找不到的错误(更新,删除和读取),或者该操作被用作与键匹配的行上的谓词的解释程序拒绝。

attrinfokeyinfo 通过所计数的属性 tot_key_attrinfo_bytestot_key_keyinfo_bytes列是一个属性LQHKEYREQ信号(见 的NDB通信协议)中使用由LDM启动的键操作。一个attrinfo 典型地含有元组字段值(插入和更新)或投影规格(读取); keyinfo包含在此模式对象中查找给定元组所需的主键或唯一键。

显示的值tot_frag_scans包括完整扫描(检查每行)和子集扫描。BLOB永远不会扫描唯一的索引和表,因此与其他扫描相关的计数一样,此值对于这些片段副本为0。

tot_scan_rows_examined可能会显示少于给定片段副本中的总行数,因为有序索引扫描可能受限于边界。另外,客户可以选择在所有可能的匹配行被检查之前结束扫描; 例如,在使用包含LIMITor EXISTS子句的SQL语句时会发生这种情况tot_scan_rows_returned总是小于或等于tot_scan_rows_examined

tot_scan_bytes_returned包括,在推送连接的情况下,投影返回到DBSPJNDB内核中块。

tot_qd_frag_scans可以通过MaxParallelScansPerFragment 数据节点配置参数的设置来实现 ,这会限制可以在单个分段副本上同时执行的扫描次数。

21.5.10.30 ndbinfo处理表

该表包含有关NDB集群节点进程的信息; 每个节点由表中的行表示。此表中仅显示连接到群集的节点。您可以从nodesconfig_nodes表中获取有关已配置但未连接到群集的节点的信息

下表提供了有关表中列的信息processes对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.378节点表的列

列名称 类型 描述
node_id 整数 节点在集群中的唯一节点ID
node_type 节点类型(管理,数据或API节点;请参阅文本)
node_version NDB在此节点上运行软件程序的版本
process_id 整数 此节点的进程ID
angel_process_id 整数 此节点的天使进程的进程ID
process_name 可执行文件的名称
service_URI 此节点的服务URI(请参阅文本)

node_id 是分配给群集中此节点的ID。

node_type列显示以下三个值之一:

  • MGM:管理节点。

  • NDB:数据节点。

  • API:API或SQL节点。

对于随NDB集群分发附带的可执行文件, node_version显示两部分的MySQL NDB集群版本字符串,例如, 5.7.22-ndb-7.5.11或者 5.7.22-ndb-7.6.5它是用其编译的。有关更多信息,请参阅 NDB Cluster软件中使用的版本字符串

process_id是主机操作系统使用进程显示应用程序(如Linux上的top或Windows平台上的任务管理器)显示的节点可执行文件的进程ID

angel_process_id是节点天使进程的系统进程ID,可确保在出现故障时自动重新启动数据节点或SQL。对于SQL节点以外的管理节点和API节点,此列的值为NULL

process_name列显示正在运行的可执行文件的名称。对于管理节点,这是 ndb_mgmd对于数据节点,这是 ndbd(单线程)或 ndbmtd(多线程)。对于SQL节点,这是mysqld对于其他类型的API节点,它是连接到集群的可执行程序的名称; NDB API应用程序可以为此使用设置自定义值 Ndb_cluster_connection::set_name()

service_URI显示服务网络地址。对于管理节点和数据节点,使用的方案是 ndb://对于SQL节点,这是 mysql://默认情况下,除SQL节点以外的API节点ndb://用于该方案; NDB API应用程序可以使用它将其设置为自定义值 Ndb_cluster_connection::set_service_uri()不管节点类型如何,该方案后面都跟着NDB传送器用于相关节点的IP地址。对于管理节点和SQL节点,此地址包含端口号(管理节点通常为1186,SQL节点通常为3306)。如果SQL节点启动时使用 --bind-address,该地址是用来代替的转运地址,除非绑定地址设置为*0.0.0.0::

其他路径信息可以包含在service_URI反映各种配置选项的SQL节点值中; 例如, mysql://198.51.100.3/tmp/mysql.sock表示SQL节点已启动 --skip-networking,并 mysql://198.51.100.3:3306/?server-id=1显示为此SQL节点启用了复制。

processes表在NDB 7.5.7和NDB 7.6.2中添加。

21.5.10.31 ndbinfo资源表

此表提供有关数据节点资源可用性和使用情况的信息。

这些资源有时被称为 超级池

下表提供了有关表中列的信息resources对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.379资源表的列

列名称 类型 描述
node_id 整数 此数据节点的唯一节点标识。
resource_name 资源名称; 见文本。
reserved 整数 为此资源保留的金额。
used 整数 此资源实际使用的金额。
max 整数 自节点上次启动以来使用的最大资源量。

resource_name可以是下表中显示的名称之一:

表21.380 ndbinfo.resources表资源名称和说明

资源名称 描述
RESERVED 由系统保留; 不能被覆盖。
DISK_OPERATIONS 如果分配了日志文件组,则使用撤消日志缓冲区的大小来设置此资源的大小。该资源仅用于为撤消日志文件组分配撤消日志缓冲区; 只能有一个这样的团体。按需要发生过度分配 CREATE LOGFILE GROUP
DISK_RECORDS 为磁盘数据操作分配的记录。
DATA_MEMORY 用于主存储器元组,索引和散列索引。如果设置了IndexMemory,则DataMemory和IndexMemory的总和加上8页32 KB。不能被过度分配。
JOBBUFFER 用于NDB调度程序分配作业缓冲区; 不能被过度分配。对于可以通信的所有线程,这大约是每个线程2 MB以及两个方向上的1 MB缓冲区。对于大型配置,这会消耗几个GB。
FILE_BUFFERS DBLQH内核块中的重做日志处理程序使用; 不能被过度分配。大小为 NoOfFragmentLogParts * RedoBuffer,每个日志文件部分加1 MB。
TRANSPORTER_BUFFERS 用于通过ndbmtd发送缓冲区; 总和 TotalSendBufferMemoryExtraSendBufferMemory这个资源可以被高达25%的过度分配。TotalSendBufferMemory通过将每个节点的发送缓冲存储器相加来计算,默认值为2 MB。因此,在具有四个数据节点和八个API节点的系统中,数据节点具有12×2MB的发送缓冲存储器。 ExtraSendBufferMemoryndbmtd使用, 每个线程的额外内存为2 MB。因此,利用4个LDM线程,2个TC线程,1个主线程,1个复制线程和2个接收线程, ExtraSendBufferMemory是10 * 2 MB。可以通过设置SharedGlobalMemory 数据节点配置参数来执行此资源的过度分配
DISK_PAGE_BUFFER 用于磁盘页面缓冲区; DiskPageBufferMemory 配置参数确定 不能被过度分配。
QUERY_MEMORY 由所使用的DBSPJ内核模块。
SCHEMA_TRANS_MEMORY 最小值为2 MB; 可以被过度使用以使用任何剩余的可用内存。

21.5.10.32 ndbinfo restart_info表

restart_info表包含有关节点重新启动操作的信息。表中的每个条目与具有给定节点ID的数据节点实时对应的节点重启状态报告。只显示任何给定节点的最新报告。

下表提供了有关表中列的信息restart_info对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.381 restart_info表的列

列名称 类型 描述
node_id 整数 节点ID在集群中
node_restart_status VARCHAR(256) 节点状态; 请参阅文本的值。其中每个对应于一个可能的值 node_restart_status_int
node_restart_status_int 整数 节点状态码; 请参阅文本的值。
secs_to_complete_node_failure 整数 以秒为单位的时间来完成节点故障处理
secs_to_allocate_node_id 整数 从节点故障完成到分配节点ID的时间(以秒为单位)
secs_to_include_in_heartbeat_protocol 整数 从节点ID分配到包含在心跳协议中的时间(秒)
secs_until_wait_for_ndbcntr_master 整数 在心跳协议中包含时间,直到等待NDBCNTR主控开始
secs_wait_for_ndbcntr_master 整数 花在等待被NDBCNTR主人接受 启动的时间
secs_to_get_start_permitted 整数 从接收主站启动权限到所有节点已接受此节点的启动为止的时间(以秒为单位)
secs_to_wait_for_lcp_for_copy_meta_data 整数 在复制元数据之前等待LCP完成的时间(秒)
secs_to_copy_meta_data 整数 从主节点复制元数据到新启动节点所需的时间(秒)
secs_to_include_node 整数 时间(秒)等待GCP并将所有节点包含到协议中
secs_starting_node_to_request_local_recovery 整数 刚刚启动的节点花在等待请求本地恢复上的时间(以秒为单位)
secs_for_local_recovery 整数 节点刚启动时本地恢复所需的时间(以秒为单位)
secs_restore_fragments 整数 从LCP文件恢复片段所需的时间(秒)
secs_undo_disk_data 整数 在记录的磁盘数据部分执行撤销日志所需的时间(以秒为单位)
secs_exec_redo_log 整数 在所有恢复的片段上执行重做日志所需的时间(秒)
secs_index_rebuild 整数 在恢复的片段上重建索引所需的时间(秒)
secs_to_synchronize_starting_node 整数 从活动节点同步起始节点所需的时间(秒)
secs_wait_lcp_for_restart 整数 LCP启动和完成重启前完成所需的时间(秒)
secs_wait_subscription_handover 整数 花在等待复制订阅切换上的时间
total_restart_secs 整数 从节点故障到节点再次启动的总秒数

下表中显示了node_restart_status_int 对应的状态名称和消息(node_restart_status)的 定义值

表21.382 restart_info表中使用的状态代码和消息

列名称 类型 描述
0 ALLOCATED_NODE_ID Allocated node id
1 INCLUDED_IN_HB_PROTOCOL Included in heartbeat protocol
2 NDBCNTR_START_WAIT Wait for NDBCNTR master to permit us to start
3 NDBCNTR_STARTED NDBCNTR master permitted us to start
4 START_PERMITTED All nodes permitted us to start
WAIT_LCP_TO_COPY_DICT Wait for LCP completion to start copying metadata
6 COPY_DICT_TO_STARTING_NODE Copying metadata to starting node
7 INCLUDE_NODE_IN_LCP_AND_GCP Include node in LCP and GCP protocols
8 LOCAL_RECOVERY_STARTED Restore fragments ongoing
9 COPY_FRAGMENTS_STARTED Synchronizing starting node with live nodes
10 WAIT_LCP_FOR_RESTART Wait for LCP to ensure durability
11 WAIT_SUMA_HANDOVER Wait for handover of subscriptions
12 RESTART_COMPLETED Restart completed
13 NODE_FAILED Node failed, failure handling in progress
14 NODE_FAILURE_COMPLETED Node failure handling completed
15 NODE_GETTING_PERMIT All nodes permitted us to start
16 NODE_GETTING_INCLUDED Include node in LCP and GCP protocols
17 NODE_GETTING_SYNCHED Synchronizing starting node with live nodes
18 NODE_GETTING_LCP_WAITED [没有]
19 NODE_ACTIVE Restart completed
20 NOT_DEFINED_IN_CLUSTER [没有]
21 NODE_NOT_RESTARTED_YET Initial state

状态编号0到12仅适用于主节点; 表中显示的其余部分适用于所有重新启动的数据节点。状态编号13和14定义节点故障状态; 当没有关于给定节点的重启的信息可用时,将发生20和21。

另请参见第21.5.1节“NDB群集启动阶段摘要”

21.5.10.33 ndbinfo server_locks表

server_locks表在结构上与cluster_locks类似,并提供了在后一个表中找到的信息的子集,但它是特定于其驻留的SQL节点(MySQL服务器)的子集。(该cluster_locks表提供了有关群集中所有锁的信息。)更确切地说, server_locks包含有关属于当前mysqld实例的线程所请求的锁的信息 ,并且可以作为其附带表server_operations这对于将锁定模式与特定的MySQL用户会话,查询或用例关联起来可能很有用。

下表提供了有关表中列的信息server_locks对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.383 server_locks表的列

列名称 类型 描述
mysql_connection_id 整数 MySQL连接ID
node_id 整数 报告节点的ID
block_instance 整数 报告LDM实例的ID
tableid 整数 包含此行的表的ID
fragmentid 整数 包含锁定行的片段的ID
rowid 整数 锁定行的ID
transid 整数 交易ID
mode 锁定请求模式
state 锁定状态
detail 这是否是第一次在行锁定队列中持有锁
op 操作类型
duration_millis 整数 等待或保持锁定的毫秒数
lock_num 整数 锁定对象的ID
waiting_for 整数 用这个ID等待锁定

mysql_connection_id列显示如图所示的MySQL连接或线程标识 SHOW PROCESSLIST

block_instance指的是内核块的一个实例。与块名称一起,可以使用此编号查找threadblocks表中的给定实例

tableid被分配给由表 NDB; 在其他ndbinfo表中使用相同的ID ,以及在ndb_show_tables的输出中使用相同的ID

transid 列中 显示的交易ID 是由NDB API为请求或持有当前锁的交易生成的标识符。

mode列显示锁定模式,该模式始终是S(共享锁定)或 X(排他锁定)之一。如果一个事务对给定行有一个排它锁,则该行上的所有其他锁具有相同的事务ID。

state列显示锁定状态。它的价值永远是H(持有)或 W(等待)之一。等待锁定请求等待由另一个事务持有的锁定。

detail列指示此锁是否是受影响行的锁定队列中的第一个存储锁,其中包含*(星号字符); 否则,此列为空。该信息可用于帮助识别锁定请求列表中的唯一条目。

op列显示请求锁定的操作类型。这始终是一个值 READINSERTUPDATEDELETESCAN,或REFRESH

duration_millis列显示此锁定请求一直等待或持有锁定的毫秒数。当为一个等待请求授予一个锁时,它被重置为0。

锁ID(lockid列)对于此节点和块实例是唯一的。

如果该lock_state列的值为 W,则此锁等待被授予,并且该waiting_for列显示此请求正在等待的锁对象的锁ID。否则, waiting_for是空的。 waiting_for可以仅指在同一行上的锁(通过node_idblock_instancetableidfragmentid,和rowid)。

server_locks表在NDB 7.5.3中添加。

21.5.10.34 ndbinfo server_operations表

server_operations表包含NDB当前SQL节点(MySQL服务器)当前涉及的所有正在进行的操作的条目。它实际上是cluster_operations表的一个子集 ,其中未显示其他SQL和API节点的操作。

下表提供了有关表中列的信息server_operations对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.384 server_operations表的列

列名称 类型 描述
mysql_connection_id 整数 MySQL服务器连接ID
node_id 整数 节点ID
block_instance 整数 阻止实例
transid 整数 交易ID
operation_type 操作类型(请参阅文本以了解可能的值)
state 操作状态(请参阅文本了解可能的值)
tableid 整数 表ID
fragmentid 整数 片段ID
client_node_id 整数 客户端节点ID
client_block_ref 整数 客户端块参考
tc_node_id 整数 事务协调器节点ID
tc_block_no 整数 交易协调员区号
tc_block_instance 整数 事务协调器块实例

mysql_connection_id与输出中显示的连接或会话ID相同 SHOW PROCESSLIST它从INFORMATION_SCHEMA表中 获得NDB_TRANSID_MYSQL_CONNECTION_MAP

block_instance指的是内核块的一个实例。与块名称一起,可以使用此编号查找threadblocks表中的给定实例

事务ID(transid)是唯一的64位数字,可以使用NDB API的 getTransactionId() 方法获得。(目前,MySQL服务器不公开正在进行的事务的NDB API事务ID。)

所述operation_type列可以采取的值的任一个READREAD-SHREAD-EXINSERTUPDATEDELETEWRITEUNLOCKREFRESHSCANSCAN-SHSCAN-EX,或 <unknown>

state柱可以具有的值中的任何一个ABORT_QUEUEDABORT_STOPPEDCOMMITTEDCOMMIT_QUEUEDCOMMIT_STOPPEDCOPY_CLOSE_STOPPEDCOPY_FIRST_STOPPEDCOPY_STOPPEDCOPY_TUPKEYIDLELOG_ABORT_QUEUEDLOG_COMMIT_QUEUEDLOG_COMMIT_QUEUED_WAIT_SIGNALLOG_COMMIT_WRITTENLOG_COMMIT_WRITTEN_WAIT_SIGNALLOG_QUEUEDPREPAREDPREPARED_RECEIVED_COMMITSCAN_CHECK_STOPPEDSCAN_CLOSE_STOPPEDSCAN_FIRST_STOPPEDSCAN_RELEASE_STOPPEDSCAN_STATE_USEDSCAN_STOPPEDSCAN_TUPKEYSTOPPEDTC_NOT_CONNECTEDWAIT_ACCWAIT_ACC_ABORTWAIT_AI_AFTER_ABORTWAIT_ATTRWAIT_SCAN_AIWAIT_TUPWAIT_TUPKEYINFOWAIT_TUP_COMMIT,或 WAIT_TUP_TO_ABORT(如果MySQL服务器在ndbinfo_show_hidden启用的情况下运行 ,您可以通过从ndb$dblqh_tcconnect_state通常隐藏表中选择来查看这个状态列表 。)

您可以NDB通过检查ndb_show_tables的输出来从表ID中获取的名称

fragid与在ndb_desc --extra-partition-info(简式-p输出中看到的分区号相同

client_node_id和中 client_block_refclient 指的是NDB群集API或SQL节点(即NDB API客户端或连接到群集的MySQL服务器)。

block_instancetc_block_instance列提供NDB内核块实例号。您可以使用它们从threadblocks表中获取有关特定线程的信息

21.5.10.35 ndbinfo server_transactions表

server_transactions表是表的子集cluster_transactions ,但仅包括当前SQL节点(MySQL服务器)是参与者的那些事务,同时包括相关的连接ID。

下表提供了有关表中列的信息server_transactions对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.385 server_transactions表的列

列名称 类型 描述
mysql_connection_id 整数 MySQL服务器连接ID
node_id 整数 事务协调器节点ID
block_instance 整数 事务协调器块实例
transid 整数 交易ID
state 操作状态(请参阅文本了解可能的值)
count_operations 整数 交易中的有状态操作数
outstanding_operations 整数 本地数据管理层仍在执行的操作(LQH块)
inactive_seconds 整数 花时间等待API
client_node_id 整数 客户端节点ID
client_block_ref 整数 客户端块参考

mysql_connection_id与输出中显示的连接或会话ID相同 SHOW PROCESSLIST它从INFORMATION_SCHEMA表中 获得NDB_TRANSID_MYSQL_CONNECTION_MAP

block_instance指的是内核块的一个实例。与块名称一起,可以使用此编号查找threadblocks表中的给定实例

事务ID(transid)是唯一的64位数字,可以使用NDB API的 getTransactionId() 方法获得。(目前,MySQL服务器不公开正在进行的事务的NDB API事务ID。)

state柱可以具有的值中的任何一个CS_ABORTINGCS_COMMITTINGCS_COMMIT_SENTCS_COMPLETE_SENTCS_COMPLETINGCS_CONNECTEDCS_DISCONNECTEDCS_FAIL_ABORTEDCS_FAIL_ABORTINGCS_FAIL_COMMITTEDCS_FAIL_COMMITTINGCS_FAIL_COMPLETEDCS_FAIL_PREPAREDCS_PREPARE_TO_COMMITCS_RECEIVINGCS_REC_COMMITTINGCS_RESTARTCS_SEND_FIRE_TRIG_REQCS_STARTEDCS_START_COMMITTINGCS_START_SCANCS_WAIT_ABORT_CONFCS_WAIT_COMMIT_CONFCS_WAIT_COMPLETE_CONFCS_WAIT_FIRE_TRIG_REQ(如果MySQL服务器在ndbinfo_show_hidden启用的情况下运行 ,您可以通过选择来查看这个状态列表 ndb$dbtc_apiconnect_state 表,这通常是隐藏的。)

client_node_id和中 client_block_refclient 指的是NDB群集API或SQL节点(即NDB API客户端或连接到群集的MySQL服务器)。

block_instance列提供 DBTC内核块实例编号。您可以使用它从threadblocks表中获取有关特定线程的信息

21.5.10.36 ndbinfo table_distribution_status表

table_distribution_status表提供有关表格表分配进度的信息 NDB

下表提供了有关列中的信息 table_distribution_status对于每列,表格显示名称,数据类型和简要说明。

表21.386 table_distribution_status表的列

列名称 类型 描述
node_id 整数 节点ID
table_id 整数 表ID
tab_copy_status 表分配数据复制到磁盘的状态; 之一 IDLESR_PHASE1_READ_PAGESSR_PHASE2_READ_TABLESR_PHASE3_COPY_TABLEREMOVE_NODELCP_READ_TABLECOPY_TAB_REQCOPY_NODE_STATEADD_TABLE_MASTERADD_TABLE_SLAVEINVALIDATE_NODE_LCPALTER_TABLECOPY_TO_SAVE,或 GET_TABINFO
tab_update_status 表分配数据更新的状态; 之一 IDLELOCAL_CHECKPOINTLOCAL_CHECKPOINT_QUEUEDREMOVE_NODECOPY_TAB_REQADD_TABLE_MASTERADD_TABLE_SLAVEINVALIDATE_NODE_LCP,或 CALLBACK
tab_lcp_status 表LCP的状态; 之一ACTIVE(等待被执行的本地检查), WRITING_TO_FILE检查点进行,但尚未写入到磁盘),或 COMPLETED(检查点进行,并保存到磁盘)
tab_status 表内部状态; 之一ACTIVE(表中存在), CREATING正被创建的表),或 DROPPING(表正被删除)
tab_storage 表格可恢复性; 中的一个NORMAL(与重做日志记录和检查点完全恢复), NOLOGGING或(从节点崩溃,空以下群集崩溃可恢复) TEMPORARY(未恢复的)
tab_partitions 整数 表格中的分区数量
tab_fragments 整数 表中的片段数量; 通常与之相同 tab_partitions; 对于完全复制的表等于tab_partitions * [number of node groups]
current_scan_count 整数 当前正在进行的扫描次数
scan_count_wait 整数 当前正在等待执行的扫描次数ALTER TABLE可以完成。
is_reorg_ongoing 整数 目前是否正在对表进行重组(如果为真,则为1)

table_distribution_status表在NDB 7.5.4中添加。

21.5.10.37 ndbinfo table_fragments表

table_fragments表提供有关表的碎片,分区,分配和(内部)复制的信息NDB

下表提供了有关列中的信息 table_fragments对于每列,表格显示名称,数据类型和简要说明。

表21.387 table_fragments表的列

列名称 类型 描述
node_id 整数 节点ID(DIH主)
table_id 整数 表ID
partition_id 整数 分区ID
fragment_id 整数 片段ID(与分区ID相同,除非表被完全复制)
partition_order 整数 分区中的片段顺序
log_part_id 整数 记录片段的部分ID
no_of_replicas 整数 复制品数量
current_primary 整数 当前主节点ID
preferred_primary 整数 首选的主节点ID
current_first_backup 整数 当前第一个备份节点ID
current_second_backup 整数 当前第二个备份节点ID
current_third_backup 整数 当前第三个备份节点ID
num_alive_replicas 整数 活动副本的当前数量
num_dead_replicas 整数 当前死亡副本的数量
num_lcp_replicas 整数 剩余检查点的副本数量

table_fragments表在NDB 7.5.4中添加。

21.5.10.38 ndbinfo table_info表

table_info表提供了有关日志记录,检查点设置,分发和存储选项的信息,这些信息对单个NDB表格有效。

下表提供了有关列中的信息 table_info对于每列,表格显示名称,数据类型和简要说明。

表21.388 table_info表的列

列名称 类型 描述
table_id 整数 表ID
logged_table 整数 是否记录表(1)或不记录(0)
row_contains_gci 整数 表行是否包含GCI(1个true,0个false)
row_contains_checksum 整数 表行是否包含校验和(1个true,0个false)
read_backup 整数 如果读取备份副本,则为1,否则为0
fully_replicated 整数 如果表被完全复制,则该值为1,否则为0
storage_type 表格存储类型; 一个MEMORYDISK
hashmap_id 整数 哈希表ID
partition_balance 用于表的分区平衡(片段计数类型); 之一 FOR_RP_BY_NODEFOR_RA_BY_NODEFOR_RP_BY_LDM,或 FOR_RA_BY_LDM
create_gci 整数 GCI在哪个表中创建

table_info表在NDB 7.5.4中添加。

21.5.10.39 ndbinfo table_replicas表

table_replicas表提供有关NDB表片段和片段副本的复制,分发和检查点的信息

下表提供了有关列中的信息 table_replicas对于每列,表格显示名称,数据类型和简要说明。

表21.389 table_replicas表的列

列名称 类型 描述
node_id 整数 从中获取数据的节点的标识(DIH 主)
table_id 整数 表ID
fragment_id 整数 片段ID
initial_gci 整数 表格的初始GCI
replica_node_id 整数 存储副本的节点的ID
is_lcp_ongoing 整数 如果LCP在此片段上正在进行,则为1,否则为0
num_crashed_replicas 整数 崩溃的副本实例的数量
last_max_gci_started 整数 最近的GCI从最近的LCP开始
last_max_gci_completed 整数 在最近的LCP中完成了最高的GCI
last_lcp_id 整数 最近LCP的ID
prev_lcp_id 整数 以前的LCP ID
prev_max_gci_started 整数 在先前的LCP中启动了最高的GCI
prev_max_gci_completed 整数 在先前的LCP中完成的最高GCI
last_create_gci 整数 上次创建上次崩溃的副本实例的GCI
last_replica_gci 整数 上次崩溃的副本实例的最后GCI
is_replica_alive 整数 1如果这个副本是活着的,否则为0

table_replicas表在NDB 7.5.4中添加。

21.5.10.40 ndbinfo tc_time_track_stats表

tc_time_track_statsDBTC通过API节点访问提供从数据节点中块(TC)实例获得的时间跟踪信息 NDB每个TC实例都跟踪代表API节点或其他数据节点进行的一组活动的延迟时间; 这些活动包括事务,事务错误,密钥读取,密钥写入,唯一索引操作,任何类型的失败密钥操作,扫描,失败的扫描,碎片扫描和失败的碎片扫描。

为每个活动保留一组计数器,每个计数器覆盖的延迟范围小于或等于上限。在每个活动结束时,确定其等待时间并且适当的计数器递增。 tc_time_track_stats以行的形式呈现此信息,并针对以下每个实例显示一行:

  • 数据节点,使用其ID

  • TC块实例

  • 其他通信数据节点或API节点,使用其ID

  • 上限值

每行包含每个活动类型的值。这是此活动发生的次数,且该行的延迟时间在该行指定的范围内(即,延迟时间不超过上限)。

下表提供了有关列中的信息 tc_time_track_stats对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.390 tc_time_track_stats表的列

列名称 类型 描述
node_id 整数 请求节点ID
block_number 整数 TC块号
block_instance 整数 TC块实例号
comm_node_id 整数 通信API或数据节点的节点ID
upper_bound 整数 间隔的上限(以微秒为单位)
scans 整数 根据从开始到结束成功扫描的持续时间,跟踪API或请求它们的数据节点。
scan_errors 整数 根据从开始到结束的失败扫描持续时间,跟踪API或请求它们的数据节点。
scan_fragments 整数 根据从开始到结束的成功片段扫描的持续时间,跟踪执行它们的数据节点
scan_fragment_errors 整数 根据从开始到结束的失败片段扫描的持续时间,跟踪执行它们的数据节点
transactions 整数 根据从开始到发送提交的成功事务的持续时间ACK,跟踪请求它们的API或数据节点。不包括无状态事务。
transaction_errors 整数 根据从开始到失败点的失败事务的持续时间,跟踪API或请求它们的数据节点。
read_key_ops 整数 基于成功锁定主键读取的持续时间。跟踪请求API的数据节点和执行它们的数据节点。
write_key_ops 整数 根据成功的主键写入的持续时间,跟踪请求API的数据节点和执行它们的数据节点。
index_key_ops 整数 基于成功的唯一索引键操作的持续时间,跟踪请求它们的API或数据节点以及执行基本表的读取的数据节点。
key_op_errors 整数 基于所有不成功的密钥读取或写入操作的持续时间,针对请求它们的API或数据节点以及执行它们的数据节点进行跟踪。

block_instance列提供 DBTC内核块实例编号。您可以将其与块名称一起使用,以获取有关threadblocks表中特定线程的信息

tc_time_track_stats表已添加到NDB 4.7.9(错误号78533,错误号21889652)。

21.5.10.41 ndbinfo线程阻塞表

threadblocks表关联数据节点,线程和NDB内核块的实例

下表提供了有关表中列的信息threadblocks对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.391线程块表的列

列名称 类型 描述
node_id 整数 节点ID
thr_no 整数 线程ID
block_name 块名称
block_instance 整数 阻止实例号码

block_name表中的值是block_namendbinfo.blocks表中选择时列中 找到的值之一虽然对于给定的NDB集群版本,可能的值列表是静态的,但列表可能在不同版本之间有所不同。

block_instance列提供内核块实例编号。

21.5.10.42 ndbinfo线程表

threads表提供有关在NDB内核中运行的线程的信息

下表提供了有关表中列的信息threads对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.392线程表的列

列名称 类型 描述
node_id 整数 线程正在运行的节点的ID
thr_no 整数 线程标识(特定于此节点)
thread_name 线程名称(线程的类型)
thread_description 线程(类型)说明

来自双节点示例集群的示例输出(包括线程描述)如下所示:

MySQL的> SELECT * FROM threads;
+ --------- + -------- + ------------- + ---------------- -------------------------------------------------- +
| node_id | thr_no | thread_name | thread_description |
+ --------- + -------- + ------------- + ---------------- -------------------------------------------------- +
| 5 | 0 | 主| | 主线程,模式和分发处理|
| 5 | 1 | rep | rep线程,异步复制和代理块处理|
| 5 | 2 | ldm | ldm线程,处理一组数据分区|
| 5 | 3 | recv | 接收线程,执行接收和轮询新接收|
| 6 | 0 | 主| | 主线程,模式和分发处理|
| 6 | 1 | rep | rep线程,异步复制和代理块处理|
| 6 | 2 | ldm | ldm线程,处理一组数据分区|
| 6 | 3 | recv | 接收线程,执行接收和轮询新接收|
+ --------- + -------- + ------------- + ---------------- -------------------------------------------------- +
8行(0.01秒)

该表在NDB 7.5.2中添加。

21.5.10.43 ndbinfo线程表

threadstat表提供了NDB内核中运行的线程统计信息的大致快照

下表提供了有关表中列的信息threadstat对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.393线程表的列

列名称 类型 描述
node_id 整数 节点ID
thr_no 整数 线程ID
thr_nm 线程名称
c_loop 主循环中的循环次数
c_exec 执行的信号数量
c_wait 等待额外输入的次数
c_l_sent_prioa 整数 发送到自己节点的优先级A信号的数量
c_l_sent_priob 整数 发送给自己节点的优先级B信号的数量
c_r_sent_prioa 整数 发送到远程节点的优先级A信号的数量
c_r_sent_priob 整数 发送到远程节点的优先级B信号的数量
os_tid 整数 操作系统线程ID
os_now 整数 操作系统时间(毫秒)
os_ru_utime 整数 OS用户CPU时间(μs)
os_ru_stime 整数 OS系统CPU时间(μs)
os_ru_minflt 整数 OS页面回收(软页面错误)
os_ru_majflt 整数 OS页面错误(硬页面错误)
os_ru_nvcsw 整数 OS自愿上下文切换
os_ru_nivcsw 整数 OS非自愿上下文切换

os_time使用系统 gettimeofday()调用。

的的值os_ru_utimeos_ru_stimeos_ru_minfltos_ru_majfltos_ru_nvcsw,和os_ru_nivcsw使用该系统获得的列getrusage()呼叫,或等同物。

由于此表包含在给定时间点采取的计数,为获得最佳结果,有必要定期查询此表并将结果存储在一个或多个中间表中。MySQL服务器的事件调度程序可以用来自动执行这种监视。有关更多信息,请参见 第23.4节“使用事件调度程序”

21.5.10.44 ndbinfo转运蛋白表

此表包含有关NDB运输车的信息。

下表提供了有关表中列的信息transporters对于每列,表格显示名称,数据类型和简要说明。其他信息可以在表格后面的注释中找到。

表21.394运输工具表的列

列名称 类型 描述
node_id 整数 此数据节点在集群中的唯一节点标识
remote_node_id 整数 远程数据节点的节点ID
status 连接的状态
remote_address 远程主机的名称或IP地址
bytes_sent 整数 使用此连接发送的字节数
bytes_received 整数 使用此连接接收的字节数
connect_count 整数 在此运输车上建立连接的次数
overloaded 布尔(0或1) 1如果此运输车当前超载,否则为0
overload_count 整数 连接后此传输器进入过载状态的次数
slowdown 布尔(0或1) 1如果此运输车处于减速状态,否则为0
slowdown_count 整数 连接后此传输器进入减速状态的次数

对于群集中的每个正在运行的数据节点,该transporters表都会显示一行,以 显示每个节点与群集中所有节点(包括自身)的连接状态该信息被显示在表中的 状态列,它可以有以下值中的任何一个:CONNECTINGCONNECTEDDISCONNECTING,或DISCONNECTED

显示已配置但当前未连接到群集的API和管理节点的连接状态 DISCONNECTEDnode_id当前没有连接的数据节点的行在 此表中未显示。(这与ndbinfo.nodes中断开的节点的类似的省略

remote_address是在remote_node_id列中显示其ID的节点的主机名或地址 bytes_sent从这个节点和 bytes_received由该节点是数字,分别由使用此连接,因为它建立了节点发送和接收的字节。对于状态为CONNECTING或的 节点, DISCONNECTED始终显示这些列 0

假设您有一个由2个数据节点,2个SQL节点和1个管理节点组成的5节点集群,如ndb_mgm客户端中SHOW命令 的输出所示

ndb_mgm> SHOW
连接到管理服务器:localhost:1186
群集配置
---------------------
[ndbd(NDB)] 2节点(s)
id = 1 @ 10.100.10.1(5.7.22-ndb-7.5.11,Nodegroup:0,*)
id = 2 @ 10.100.10.2(5.7.22-ndb-7.5.11,节点组:0)

[ndb_mgmd(MGM)] 1个节点
id = 10 @ 10.100.10.10(5.7.22-ndb-7.5.11)

[mysqld(API)] 2节点(s)
id = 20 @ 10.100.10.20(5.7.22-ndb-7.5.11)
id = 21 @ 10.100.10.21(5.7.22-ndb-7.5.11)

transporters 第一个数据节点表-5中有10行,第二个数据节点有5个 - 假设所有数据节点都在运行,如下所示:

mysql> SELECT node_id, remote_node_id, status
    - >   FROM ndbinfo.transporters;
+ --------- + ---------------- + --------------- +
| node_id | remote_node_id | 状态|
+ --------- + ---------------- + --------------- +
| 1 | 1 | DISCONNECTED |
| 1 | 2 | 连接|
| 1 | 10 | 连接|
| 1 | 20 | 连接|
| 1 | 21 | 连接|
| 2 | 1 | 连接|
| 2 | 2 | DISCONNECTED |
| 2 | 10 | 连接|
| 2 | 20 | 连接|
| 2 | 21 | 连接|
+ --------- + ---------------- + --------------- +
10行(0.04秒)

如果关闭使用该命令在这个集群中的数据的一个节点2 STOPndb_mgm客户端,然后重复前面的查询(再次使用MySQL的客户端),该表目前只显示5行1列从剩余的管理每个连接节点到另一个节点(包括它自己和当前处于脱机状态的数据节点),并显示CONNECTING每个剩余连接到当前处于脱机状态的数据节点的状态,如下所示:

mysql> SELECT node_id, remote_node_id, status
    - >   FROM ndbinfo.transporters;
+ --------- + ---------------- + --------------- +
| node_id | remote_node_id | 状态|
+ --------- + ---------------- + --------------- +
| 1 | 1 | DISCONNECTED |
| 1 | 2 | 连接|
| 1 | 10 | 连接|
| 1 | 20 | 连接|
| 1 | 21 | 连接|
+ --------- + ---------------- + --------------- +
5行(0.02秒)

connect_countoverloadedoverload_countslowdown,和slowdown_count计数器被重置上连接,并且所述远程节点断开连接之后仍保持它们的值。bytes_sentbytes_received柜台也被重置连接,因此保留下断开(直到下一次连接它们进行复位),它们的值。

当此传输器的发送缓冲区包含多个字节(默认值为80% ,即0.8 * 2097152 = 1677721字节),由引用过载状态 就会发生 当给定的传输器处于过载状态时,尝试使用此传输器的任何新事务都会因错误1218(在NDB内核中发送缓冲器过载)而失败这会影响扫描和主键操作。 overloadedoverload_countOVerloadLimitSendBufferMemory

减速通过参考状态 slowdownslowdown_count当所述转运的发送缓冲区包含的过载极限(默认等于0.6 * 2097152 = 1258291字节)的60%以上发生该表的列。在此状态下,使用此运输车的任何新扫描都会减少其批量以减小运输车的负载。

发送缓冲区减速或超载的常见原因包括:

  • 数据大小,特别是存储在TEXT列或 BLOB列(或两种列)中 的数据量

  • 在同一台主机上有一个数据节点(ndbd或ndbmtd)作为参与二进制日志记录的SQL节点

  • 每笔交易或交易批次有大量的行

  • 配置问题如不足 SendBufferMemory

  • 硬件问题,如内存不足或网络连接不畅

另请参见第21.3.3.14节“配置NDB群集发送缓冲区参数”

21.5.11 NDB簇的INFORMATION_SCHEMA表

两个INFORMATION_SCHEMA表提供了在管理NDB群集时特别有用的信息。FILES表提供有关NDB群集磁盘数据文件的信息。ndb_transid_mysql_connection_map 表提供了事务,事务协调器和API节点之间的映射。

有关NDB集群事务,操作,线程,块和其他性能方面的其他统计数据和其他数据可以从ndbinfo数据库中的表中获得 有关这些表的信息,请参见 第21.5.10节“ndbinfo:NDB群集信息数据库”

21.5.12 NDB集群安全问题

本节讨论在设置和运行NDB群集时要考虑的安全注意事项。

本节涵盖的主题包括以下内容:

  • NDB集群和网络安全问题

  • 与安全运行NDB群集相关的配置问题

  • NDB集群和MySQL特权系统

  • 适用于NDB群集的MySQL标准安全程序

21.5.12.1 NDB集群安全和联网问题

在本节中,我们将讨论与NDB群集相关的基本网络安全问题。记住NDB Cluster 开箱即用并不安全是非常重要的您或您的网络管理员必须采取适当的措施,以确保您的群集不会通过网络受到危害。

集群通信协议本质上是不安全的,在集群中的节点之间的通信中不使用加密或类似的安全措施。由于网络速度和等待时间对群集的效率有直接影响,因此对于节点之间的网络连接使用SSL或其他加密也不可取,因为这样的方案会有效地降低通信速度。

也没有认证用于控制API节点访问NDB群集。与加密一样,强加认证要求的开销会对群集性能产生不利影响。

另外,在访问群集时,不会检查以下任何一个源IP地址:

  • SQL或API节点使用文件中的 空白创建的空闲插槽[mysqld][api]config.ini

    这意味着,如果文件中有空白 [mysqld][api] 部分config.ini,那么知道管理服务器主机名(或IP地址)和端口的任何API节点(包括SQL节点)都可以连接到群集并无限制地访问其数据。有关此问题和相关问题的更多信息请参见 第21.5.12.2节“NDB集群和MySQL特权”。)

    注意

    您可以通过HostName文件中的所有[mysqld][api]部分 指定参数,对SQL和API节点对群集的访问进行一些控制config.ini但是,这也意味着,如果您希望将API节点从以前未使用的主机连接到群集,则需要将[api]包含其主机名添加 config.ini文件中。

    有关该 参数的 更多信息可在本章的其他地方找到 HostName有关使用API节点的配置示例 请参见第21.3.1节“NDB群集的快速测试设置”HostName

  • 任何ndb_mgm客户端

    这意味着任何获得管理服务器主机名(或IP地址)和端口(如果不是标准端口)的集群管理客户端都可以连接到集群并执行任何管理客户端命令。这包括诸如ALL STOP和的 命令SHUTDOWN

由于这些原因,有必要在网络级别上保护集群。群集最安全的网络配置是将群集节点与其他任何网络通信之间的连接隔离开来的配置。这可以通过以下任何方法来完成:

  1. 在与任何公共网络物理隔离的网络上保持群集节点。这个选项是最可靠的; 然而,这是实施成本最高的。

    我们在这里展示一个使用这种物理隔离网络的NDB集群设置的例子:

    图21.25具有硬件防火墙的NDB群集

    Content is described in the surrounding text.

    此安装程序有两个网络,一个用于群集管理服务器和数据节点的专用(固体盒),以及一个SQL节点驻留的公用(虚线框)。(我们展示了使用千兆交换机连接的管理和数据节点,因为这提供了最佳性能。)两个网络都由硬件防火墙(有时也称为基于网络的防火墙)保护

    这种网络设置是最安全的,因为只要SQL节点不允许任何数据包通过SQL节点,任何数据包都不能从网络外部到达群集的管理或数据节点,并且任何群集的内部通信都不会到达外部要转发的数据包。这意味着,当然,所有的SQL节点都必须防范黑客攻击。

    重要

    关于潜在的安全漏洞,SQL节点与任何其他MySQL服务器没有区别。有关可用于保护MySQL服务器的技术的说明,请参见 第6.1.3节“使MySQL免受攻击者攻击”

  2. 使用一个或多个软件防火墙(也称为 基于主机的防火墙)来控制哪些数据包从网络中不需要访问的部分通过群集。在这种类型的设置中,软件防火墙必须安装在群集中的每台主机上,否则可能从本地网络外部访问。

    基于主机的选项实施成本最低,但纯粹依靠软件来提供保护,因此最难以保证安全。

    这种类型的NDB集群网络设置如下所示:

    图21.26带有软件防火墙的NDB群集

    Content is described in the surrounding text.

    使用这种类型的网络设置意味着有两个NDB群集主机区域。每个群集主机必须能够与群集中的所有其他机器进行通信,但只有托管SQL节点的那些(虚线框)才可以与外部进行任何联系,而区域中包含数据节点和管理节点(实体框)必须与不属于群集一部分的任何机器隔离。使用这些应用程序的集群和用户应用程序必须不能 被允许具有管理和数据节点主机的直接访问。

    为此,您必须根据每个群集主机上运行的节点类型设置软件防火墙,以将流量限制为下表中显示的类型或类型:

    表21.395基于主机的防火墙群集配置中的节点类型

    节点类型 允许的流量
    SQL或API节点
    • 它来源于管理或数据节点的IP地址(使用任何TCP或UDP端口)。

    • 它起源于集群驻留的网络内,并位于应用程序正在使用的端口上。

    数据节点或管理节点
    • 它来源于管理或数据节点的IP地址(使用任何TCP或UDP端口)。

    • 它来源于SQL或API节点的IP地址。


    应该拒绝给定节点类型以外的任何流量。

    防火墙应用程序和防火墙应用程序的配置防火墙的具体细节不同,超出了本手册的范围。iptables是一个非常常见和可靠的防火墙应用程序,它通常与APF一起用作前端,使配置更容易。如果您选择实施此类型的NDB群集网络设置,或者在下一项下讨论混合类型,您可以(也应该)查阅您使用的软件防火墙的文档

  3. 也可以采用前两种方法的组合,使用硬件和软件来保护群集,即使用基于网络的和基于主机的防火墙。就安全级别和成本而言,这在前两种方案之间。这种类型的网络设置将群集保留在硬件防火墙之后,但允许传入数据包超出连接所有群集主机的路由器以到达SQL节点。

    此处显示了使用硬件和软件防火墙组合的NDB群集的一种可能的网络部署:

    图21.27具有硬件和软件防火墙组合的NDB群集

    Content is described in the surrounding text.

    在这种情况下,您可以在硬件防火墙中设置规则,以拒绝除SQL节点和API节点以外的任何外部流量,然后仅在您的应用程序所需的端口上允许流量通过它们。

无论您使用哪种网络配置,请记住,从保持集群安全的角度来看,您的目标保持不变 - 防止任何非必要流量到达集群,同时确保集群中节点之间的最高效通信。

由于NDB群集需要大量端口才能在节点之间进行通信,因此推荐的选项是使用隔离网络。这是防止不需要的流量到达集群的最简单方法。

注意

如果您希望远程管理NDB群集(即从本地网络外部),建议使用ssh或其他安全登录shell访问SQL节点主机。然后,您可以从该主机运行管理客户端,从群集本地网络内安全地访问管理服务器。

尽管理论上可以这样做,但 推荐使用 ndb_mgm直接从运行群集的本地网络之外管理群集。由于在管理客户端和管理服务器之间不进行身份验证和加密,这代表了管理集群的非常不安全的手段,并且迟早几乎肯定会被破坏。

21.5.12.2 NDB集群和MySQL特权

在本节中,我们将讨论MySQL特权系统如何与NDB集群相关,以及这对保持NDB集群安全的影响。

标准MySQL权限适用于NDB群集表。这包括在数据库,表和列级授予的所有MySQL特权类型(SELECT权限, UPDATE特权, DELETE权限等)。与任何其他MySQL服务器一样,用户和特权信息存储在mysql系统数据库中。用于授予和撤消对NDB表,包含此类表的数据库以及此类表中的列的权限的SQL语句 在所有方面与涉及任何(其他)MySQL存储引擎的数据库对象有关的GRANTREVOKE语句完全相同在这方面同样如此 CREATE USERDROP USER声明。

请记住,默认情况下,MySQL授权表使用MyISAM存储引擎,这一点很重要因此,这些表通常不会在作为NDB集群中的SQL节点的MySQL服务器之间被复制或共享。换句话说,默认情况下,用户及其权限的更改不会自动在SQL节点之间传播。如果您愿意,您可以启用跨NDB Cluster SQL节点自动分配MySQL用户和权限; 有关详细信息请参见 第21.5.15节“NDB群集的分布式MySQL权限”

相反,因为MySQL没有办法拒绝特权(特权可以首先被撤销或不被授予,但是没有被拒绝),但对于NDB具有特权的用户在一个SQL节点上没有特别的保护另一个SQL节点; (这是真实的,即使你不使用的用户权限自动分配,这样做的明确的例子是MySQL的 root帐户,它可以执行任何数据库对象的任何行动。在与空组合 [mysqld][api]将各部分config.ini文件,这个帐户可以是特别危险,要理解原因,请考虑以下情况:

  • config.ini文件至少包含一个空白[mysqld][api]部分。这意味着NDB集群管理服务器不会检查MySQL服务器(或其他API节点)访问NDB集群的主机。

  • 没有防火墙,或者防火墙无法防止网络外部主机访问NDB集群。

  • NDB群集管理服务器的主机名或IP地址是已知的或可以从网络外部确定。

如果这些条件是真的,那么任何地方的任何人都可以启动MySQL服务器 并访问此NDB群集。使用MySQL 帐户,此人可以执行以下操作: --ndbcluster --ndb-connectstring=management_hostroot

  • 执行元数据语句(如 SHOW DATABASES语句(获取NDB 服务器上所有数据库的列表)或 语句以获取给定数据库中所有的列表 SHOW TABLES FROM some_ndb_databaseNDB

  • 在任何发现的表上运行任何合法的MySQL语句,例如:

    • SELECT * FROM some_table 读取任何表中的所有数据

    • DELETE FROM some_table 从表中删除所有数据

    • DESCRIBE some_table或者 确定表格模式 SHOW CREATE TABLE some_table

    • UPDATE some_table SET column1 = some_value垃圾数据填充表格列; 这实际上可能会造成比简单删除所有数据更大的损害

      更多潜在的变化可能包括这样的陈述:

      UPDATE some_tableSET an_int_column= an_int_column+ 1
      

      要么

      UPDATE some_tableSET a_varchar_column= REVERSE(a_varchar_column

      这种恶意陈述仅受攻击者想象的限制。

    唯一可以安全避免这种混乱的表格就是那些使用存储引擎创建的表NDB,而不是流氓 SQL节点不可见的表

    可以登录的用户也可以root访问INFORMATION_SCHEMA数据库及其表格,从而获取有关数据库,表格,存储例程,预定事件以及元数据存储在其中的任何其他数据库对象的信息 INFORMATION_SCHEMA

    root除非您使用分布式权限,否则在不同的NDB群集SQL节点上帐户使用不同的密码也是一个非常好的主意

总之,如果可以从本地网络外部直接访问,则无法拥有安全的NDB群集。

重要

切勿将MySQL root帐户密码留空在将MySQL作为独立(非群集)MySQL服务器运行时,将它作为NDB群集SQL节点运行时也是如此,并且应该在将MySQL服务器配置为SQL之前将其作为MySQL安装过程的一部分来完成NDB群集中的节点。

如果您希望使用NDB群集的分布式特权功能,则不应简单地将mysql数据库中的系统表转换为NDB手动使用 存储引擎。使用为此目的提供的存储过程; 请参见 第21.5.15节“NDB集群的分布式MySQL权限”

否则,如果您需要mysql 在SQL节点之间同步系统表,则可以使用标准MySQL复制来执行此操作,或者使用脚本在MySQL服务器之间复制表条目。

概要。  这里列出了关于与NDB集群相关的MySQL特权系统最重要的要点:

  1. 在一个SQL节点上建立的用户和权限不会自动存在或在集群中的其他SQL节点上生效。相反,在群集中的一个SQL节点上删除用户或特权不会从其他任何SQL节点中删除用户或特权。

  2. 您可以使用SQL脚本及其包含的存储过程在SQL节点中分配MySQL用户和权限,这些程序在NDB群集分配中用于此目的。

  3. 一旦MySQL用户被授予NDBNDB集群中一个SQL节点表的权限 ,即使您没有使用特权分配,该用户也可以查看该表中的任何数据,而不管数据来自哪个SQL节点。

21.5.12.3 NDB集群和MySQL安全程序

在本节中,我们将讨论适用于运行NDB群集的MySQL标准安全过程。

通常,安全运行MySQL的任何标准过程也适用于作为NDB集群的一部分运行MySQL服务器。首先,您应该始终以mysql系统用户身份运行MySQL服务器; 这与在标准(非群集)环境中运行MySQL没有区别。mysql系统帐户应该被唯一和明确的规定。幸运的是,这是新安装MySQL的默认行为。您可以通过使用系统命令来验证mysqld进程是否以系统用户身份运行,mysql如下所示:

外壳> ps aux | grep mysql
根10467 0.0 0.1 3616 1380点/ 3 S 11:53 0:00 \
  / bin / sh ./mysqld_safe --ndbcluster --ndb-connectingtring = localhost:1186
mysql 10512 0.2 2.5 58528 26636 pts / 3 Sl 11:53 0:00 \
  / usr / local / mysql / libexec / mysqld --basedir = / usr / local / mysql \
  --datadir = / usr / local / mysql / var --user = mysql --ndbcluster \
  --ndb-connectingtring = localhost:1186 --pid-file = / usr / local / mysql / var / mothra.pid \
  --log误差=的/ usr /本地/ MySQL的的/ var / mothra.err
jon 10579 0.0 0.0 2736 688 pts / 0 S + 11:54 0:00 grep mysql

如果mysqld进程与其他任何用户一样运行mysql,则应立即关闭并以mysql用户身份重新启动它如果该用户在系统中不存在,则 mysql应该创建用户帐户,并且该用户应该是mysql用户组的一部分; 在这种情况下,您还应该确保此系统上的MySQL数据目录(使用mysqld--datadir选项 设置 )由用户拥有 ,并且SQL节点的 文件包含 在该 部分中。或者,您可以使用启动MySQL服务器进程mysqlmy.cnfuser=mysql[mysqld]--user=mysql在命令行中,但最好使用该 my.cnf选项,因为您可能会忘记使用命令行选项,所以 mysqld无意中以另一个用户身份运行。mysqld_safe的启动脚本强制MySQL作为运行mysql用户。

重要

切勿以系统root用户身份运行mysqld这样做意味着系统中的任何文件都可以被MySQL读取,因此 - 如果MySQL受到攻击 - 可能会被攻击者破坏。

正如前一节所述(请参见 第21.5.12.2节“NDB集群和MySQL特权”),您应该始终在运行MySQL服务器时立即设置root密码。您还应该删除默认安装的匿名用户帐户。您可以使用以下语句完成这些任务:

外壳> mysql -u root

mysql> UPDATE mysql.user
    - >      
    - >     SET Password=PASSWORD('secure_password')WHERE User='root';

mysql> DELETE FROM mysql.user
    - >     WHERE User='';

MySQL的> FLUSH PRIVILEGES;

在执行DELETE声明时不要忽略 WHERE子句时要小心 ,否则可能会删除 所有 MySQL用户。一定要在FLUSH PRIVILEGES修改mysql.user 表格后立即运行 语句,以便更改立即生效。如果没有 FLUSH PRIVILEGES,更改将在下次重新启动服务器时生效。

注意

许多NDB集群实用程序(如 ndb_show_tablesndb_descndb_select_all)也可以在没有身份验证的情况下运行,并且可以显示表名,模式和数据。默认情况下,这些安装在具有权限wxr-xr-x(755)的Unix样式系统上,这意味着它们可以由任何可以访问该mysql/bin目录的用户执行

有关这些实用程序的更多信息 请参见第21.4节“NDB群集程序”

21.5.13 NDB集群磁盘数据表

可以将未索引的NDB表格列存储 在磁盘上,而不是存储在RAM中。

作为实施NDB集群磁盘数据工作的一部分,NDB集群对节点恢复和重启过程中的大量(兆兆字节)数据进行了有效处理方面进行了多项改进。这些包括用于使起始节点与非常大的数据集同步非窃取算法。有关更多信息,请参阅 由NDB集群开发人员MikaelRonström和Jonas Oreland编写的NDB Cluster 5.1的恢复原则

NDB集群磁盘数据性能可能受到许多配置参数的影响。有关这些参数及其效果的信息,请参阅 NDB群集磁盘数据配置参数NDB群集磁盘数据存储以及GCP停止 错误

使用磁盘数据存储的NDB群集的性能也可以通过将数据节点文件系统与撤消日志文件和表空间数据文件分开来显着提高,这可以使用符号链接完成。有关更多信息,请参见 第21.5.13.2节“在磁盘数据对象中使用符号链接”

21.5.13.1 NDB集群磁盘数据对象

NDB群集磁盘数据存储是使用多个 磁盘数据对象实现的这些包括以下内容:

  • 表空间充当其他磁盘数据对象的容器。

  • 撤消日志文件撤销回滚事务所需的信息。

  • 将一个或多个撤销日志文件分配给 日志文件组,然后将其分配给表空间。

  • 数据文件存储磁盘数据表数据。数据文件直接分配给表空间。

撤消日志文件和数据文件是每个数据节点的文件系统中的实际文件; 默认情况下它们被放置在 NDB簇文件中的指定位置,以及其中 ndb_node_id_fsDataDirconfig.ininode_id,数据节点的节点ID通过在创建撤消日志或数据文件时指定绝对路径或相对路径作为文件名的一部分,可以在别处放置这些路径。创建这些文件的语句将在本节的后面部分中介绍。

NDB群集表空间和日志文件组不作为文件实现。

重要

虽然并非所有的磁盘数据对象都是作为文件实现的,但它们都共享相同的名称空间。这意味着 每个磁盘数据对象必须是唯一命名的(而不仅仅是给定类型的每个磁盘数据对象)。例如,您不能有一个名为的表空间和一个日志文件组dd1

假设您已经设置了包含所有节点(包括管理节点和SQL节点)的NDB群集,则在磁盘上创建NDB群集表的基本步骤如下所示:

  1. 创建一个日志文件组,并为其分配一个或多个撤销日志文件(撤消日志文件有时也称为“未命名文件”)。

    注意

    撤销日志文件仅适用于磁盘数据表; 它们不用于 NDBCLUSTER仅存储在内存中的表。

  2. 创建一个表空间; 将日志文件组以及一个或多个数据文件分配给表空间。

  3. 创建一个使用此表空间进行数据存储的磁盘数据表。

这些任务中的每一个都可以使用mysql客户端或其他MySQL客户端应用程序中的SQL语句完成,如下面的示例所示。

  1. 我们创建一个名为lg_1 using 的日志文件组CREATE LOGFILE GROUP这个日志文件组由两个撤消日志文件组成,我们的名称undo_1.logundo_2.log初始大小分别为16 MB和12 MB。(撤消日志文件的默认初始大小为128 MB)。(可选)还可以为日志文件组的撤消缓冲区指定大小,或者允许它假定默认值为8 MB。在这个例子中,我们将UNDO缓冲区的大小设置为2 MB。日志文件组必须使用撤消日志文件创建; 所以我们添加 undo_1.loglg_1 在此CREATE LOGFILE GROUP 声明:

    创建日志文件组lg_1
        ADD UNDOFILE'undo_1.log'
        INITIAL_SIZE 16M
        UNDO_BUFFER_SIZE 2M
        ENGINE NDBCLUSTER;
    

    要添加undo_2.log到日志文件组,请使用以下ALTER LOGFILE GROUP语句:

    ALTER LOGFILE GROUP lg_1
        ADD UNDOFILE'undo_2.log'
        INITIAL_SIZE 12M
        ENGINE NDBCLUSTER;
    

    一些注意事项:

    • .log这里使用文件扩展名不是必需的。我们仅仅使用它来使日志文件易于识别。

    • 每一个CREATE LOGFILE GROUPALTER LOGFILE GROUP声明必须包含一个 ENGINE选项。这个选项唯一允许的值是 NDBCLUSTERNDB

      重要

      在任何给定时间,在同一个NDB集群中最多可以存在一个日志文件组。

    • 当您使用日志文件组添加撤消日志文件时,将 在该集群中每个数据节点 目录中 创建一个名称的文件,其中 是数据节点的节点标识。每个撤销日志文件具有在SQL语句中指定的大小。例如,如果NDB群集有4个数据节点,则每个文件的大小为12 MB。 ADD UNDOFILE 'filename'filenamendb_node_id_fsDataDirnode_idALTER LOGFILE GROUP刚刚显示语句会创建4个撤消日志文件,每个文件在4个数据节点中的每个节点的数据目录中各创建一个; 这些文件中的每一个都被命名 undo_2.log

    • UNDO_BUFFER_SIZE 受限于可用系统内存的数量。

    • 有关该CREATE LOGFILE GROUP 语句的更多信息 ,请参见第13.1.15节“CREATE LOGFILE GROUP语法”有关更多信息ALTER LOGFILE GROUP,请参见 第13.1.5节“ALTER LOGFILE GROUP语法”

  2. 现在我们可以创建一个表空间,其中包含NDB Cluster Disk Data表用于存储其数据的文件。表空间也与特定的日志文件组相关联。创建新表空间时,必须指定将用于撤消日志记录的日志文件组; 您还必须指定一个数据文件。表空间创建后,您可以将更多数据文件添加到表空间中; 也可以从表空间中删除数据文件(本节稍后会提供丢弃数据文件的示例)。

    假设我们希望创建一个名为表空间 ts_1,它使用lg_1 它的日志文件组。该表空间包含两个名为data_1.datand的 数据文件data_2.dat,其初始大小分别为32 MB和48 MB。(默认值 INITIAL_SIZE是128 MB。)我们可以使用两个SQL语句来完成此操作,如下所示:

    创建表格空间ts_1
        ADD DATAFILE'data_1.dat'
        使用日志文件组lg_1
        INITIAL_SIZE 32M
        ENGINE NDBCLUSTER;
    
    ALTER TABLESPACE ts_1
        ADD DATAFILE'data_2.dat'
        INITIAL_SIZE 48M
        ENGINE NDBCLUSTER;
    

    CREATE TABLESPACE 语句ts_1使用数据文件创建一个表空间data_1.dat,并ts_1与日志文件组 相关联lg_1ALTER TABLESPACE将第二数据文件(data_2.dat)。

    一些注意事项:

    • .log本示例中用于撤消日志文件的.dat文件扩展名一样,对于文件扩展名没有特殊意义 ; 它仅用于轻松识别数据文件。

    • 使用数据文件添加到表空间时 ,会在集群中每个数据节点 内的目录中 创建一个名称的文件,其中 是数据节点的节点标识。每个数据文件具有在SQL语句中指定的大小。例如,如果NDB群集有4个数据节点,则刚刚显示语句会创建4个数据文件,每个数据文件在4个数据节点中的每一个的数据目录中各有1个; 每个文件都被命名 ,每个文件的大小为48 MB。 ADD DATAFILE 'filename'filenamendb_node_id_fsDataDirnode_idALTER TABLESPACEdata_2.dat

    • 所有CREATE TABLESPACEALTER TABLESPACE 语句都必须包含一个ENGINE 子句; 只能使用与表空间相同的存储引擎的表在表空间中创建。对于NDB簇表空间,此选项的唯一允许值为NDBCLUSTERNDB

    • 有关CREATE TABLESPACEand ALTER TABLESPACE 语句的更多信息 ,请参见第13.1.19节“CREATE TABLESPACE语法”第13.1.9节“ALTER TABLESPACE语法”

  3. 现在可以创建一个表,其非索引列存储在表空间中的磁盘上 ts_1

    CREATE TABLE dt_1(
        member_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
        last_name VARCHAR(50)NOT NULL,
        first_name VARCHAR(50)NOT NULL,
        dob DATE NOT NULL,
        加入了DATE NOT NULL,
        INDEX(姓氏,名字)
        TABLESPACE ts_1存储磁盘
        ENGINE NDBCLUSTER;
    

    TABLESPACE ... STORAGE DISK选项告诉NDBCLUSTER存储引擎使用表空间ts_1来存储磁盘数据。

    一旦表ts_1已经创建如图所示,您可以执行 INSERTSELECTUPDATE,和 DELETE它的语句,就像你会与任何其他MySQL表。

    还可以通过使用STORAGE子句作为a CREATE TABLEALTER TABLE语句中列定义的一部分来指定单个列是存储在磁盘上还是内存中 STORAGE DISK导致该列存储在磁盘上,并STORAGE MEMORY导致使用内存中的存储。有关更多信息请参见 第13.1.18节“CREATE TABLE语法”

索引列中隐式存储的列。  对于dt_1刚刚显示的示例中定义的表格,只有dobjoined列存储在磁盘上。这是因为对索引idlast_name以及 first_name属于这些列列等数据存储在RAM中。只有非索引列可以保存在磁盘上; 索引和索引列数据继续存储在内存中。在设计磁盘数据表时,您必须记住使用索引和保存RAM之间的这种折衷。

您无法将索引添加到已明确声明的列STORAGE DISK,而无需先将其存储类型更改为MEMORY; 任何尝试这样做都会因错误而失败。隐式使用磁盘存储的可以被索引; 完成后,该列的存储类型将MEMORY自动更改通过 隐式,我们指的是一个存储类型未被声明但是从父表继承的列。在以下CREATE TABLE语句中(使用ts_1前面定义的表空间),列 c2c3隐式使用磁盘存储:

mysql> CREATE TABLE ti (
    - >      c1 INT PRIMARY KEY, 
    - >      c2 INT,
    - >      c3 INT,
    - >      c4 INT
    - > )
    - >      STORAGE DISK
    - >      TABLESPACE ts_1
    - >     ENGINE NDBCLUSTER;
查询OK,0行受影响(1.31秒)

因为c2c3并且 c4它们本身没有声明 STORAGE DISK,所以可以对它们进行索引。在这里,我们将索引添加到c2c3分别使用CREATE INDEXALTER TABLE

MySQL的> CREATE INDEX i1 ON ti(c2);
查询OK,0行受影响(2.72秒)
记录:0重复:0警告:0

MySQL的> ALTER TABLE ti ADD INDEX i2(c3);
查询OK,0行受影响(0.92秒)
记录:0重复:0警告:0

SHOW CREATE TABLE 确认索引已添加。

MySQL的> SHOW CREATE TABLE ti\G
*************************** 1. row ******************** *******
       表:ti
创建表:CREATE TABLE`ti`(
  `c1` int(11)NOT NULL,
  `c2` int(11)DEFAULT NULL,
  `c3` int(11)DEFAULT NULL,
  `c4` int(11)DEFAULT NULL,
  PRIMARY KEY(`c1`),
  KEY`i1`(`c2`),
  KEY`i2`(`c3`)
)/ *!50100 TABLESPACE`ts_1` STORAGE DISK * / ENGINE = ndbcluster DEFAULT CHARSET = latin1
一排(0.00秒)

您可以使用ndb_desc查看索引列(强调文本)现在使用内存而不是磁盘存储:

外壳> ./ndb_desc -d test t1
-  t1  - 
版本:33554433
片段类型:HashMapPartition
K值:6
最小载荷系数:78
最大负载率:80
临时表:没有
属性数量:4
主键数量:1
frm数据长度:317
最大行数:0
行校验和:1
GCI行:1
SingleUserMode:0
ForceVarPart:1
PartitionCount:4
碎片数量:4
PartitionBalance:FOR_RP_BY_LDM
ExtraRowGciBits:0
ExtraRowAuthorBits:0
TableStatus:已检索
表格选项:
HashMap:DEFAULT-HASHMAP-3840-4
- 属性 - 
c1 INT主键分配键AT =固定ST =存储器
c2 Int NULL AT = FIXED ST = MEMORY
c3 Int NULL AT = FIXED ST = MEMORY
c4 Int NULL AT = FIXED ST = DISK
- 索引 -  
PRIMARY KEY(c1) -  UniqueHashIndex
i2(c3) -  OrderedIndex
PRIMARY(c1) -  OrderedIndex
i1(c2) -  OrderedIndex

NDBT_ProgramExit:0  - 确定

性能注释。  如果磁盘数据文件保存在与数据节点文件系统不同的物理磁盘上,则使用磁盘数据存储的群集性能会大大提高。这必须为群集中的每个数据节点完成,以获得任何明显的好处。

您可以使用绝对和相对文件系统路径与 ADD UNDOFILEADD DATAFILE相对路径相对于数据节点的数据目录进行计算。您也可以使用符号链接; 有关更多信息和示例请参见第21.5.13.2节“对磁盘数据对象使用符号链接”

日志文件组,表空间以及使用这些表的任何磁盘数据表必须按特定顺序创建。放弃任何这些对象也是如此:

  • 只要有任何表空间正在使用它,日志文件组就不能被删除。

  • 只要包含任何数据文件,表空间就不能被删除。

  • 只要存在任何正在使用表空间的表,就不能从表空间中删除任何数据文件。

  • 无法删除与创建文件的表空间不同的表空间相关联创建的文件。(错误#20053)

例如,要删除本节中迄今创建的所有对象,可以使用以下语句:

MySQL的> DROP TABLE dt_1;

mysql> ALTER TABLESPACE ts_1
    - > DROP DATAFILE 'data_2.dat'
    - >ENGINE NDBCLUSTER;

mysql> ALTER TABLESPACE ts_1
    - > DROP DATAFILE 'data_1.dat'
    - >ENGINE NDBCLUSTER;

mysql> DROP TABLESPACE ts_1
    - >ENGINE NDBCLUSTER;

mysql> DROP LOGFILE GROUP lg_1
    - >ENGINE NDBCLUSTER;

这些语句必须按所示顺序执行,但两个ALTER TABLESPACE ... DROP DATAFILE语句可以按任一顺序执行。

您可以通过查询数据库中FILES来获取有关磁盘数据表使用的数据文件INFORMATION_SCHEMA信息。额外的 NULL提供了有关撤消日志文件的附加信息。有关更多信息和示例,请参见第24.8节“INFORMATION_SCHEMA文件表”

21.5.13.2对磁盘数据对象使用符号链接

通过将数据节点文件系统与撤消日志文件和表空间数据文件分开并将它们放在不同的磁盘上,可以大大提高使用磁盘数据存储的NDB群集的性能。在NDB集群的早期版本中,在NDB集群中没有直接的支持,但可以使用本节中描述的符号链接来实现这种分离。NDB集群支持数据节点配置参数 FileSystemPathDDFileSystemPathDataFiles以及 FileSystemPathUndoFiles为此目的使用符号链接不必要的。有关这些参数的更多信息,请参阅 磁盘数据文件系统参数

集群中的每个数据节点都会在文件中定义 的数据节点下的 目录中创建一个文件系统 在这个例子中,我们假定每个数据节点主机具有3个磁盘,别名为 ,和 ,和该群集的 包括以下内容: ndb_node_id_fsDataDirconfig.ini/data0/data1/data2config.ini

[ndbd默认]
DataDir = / data0

我们的目标是将所有磁盘数据日志文件 /data1和所有磁盘数据数据文件放入 /data2每个数据节点主机中。

注意

在这个例子中,我们假设集群的数据节点主机都使用Linux操作系统。对于其他平台,您可能需要将操作系统的命令替换为此处显示的那些命令。

要完成此操作,请执行以下步骤:

  • 在数据节点文件系统下创建指向其他驱动器的符号链接:

    shell> cd /data0/ndb_2_fs
    shell>ls
    D1 D10 D11 D2 D8 D9 LCP
    shell> ln -s /data0 dnlogs
    shell>ln -s /data1 dndata
    

    你现在应该有两个符号链接:

    外壳> ls -l --hide=D*
    lrwxrwxrwx 1个用户组30 2007-03-19 13:58 dndata  - > / data1
    lrwxrwxrwx 1个用户组30 2007-03-19 13:59 dnlogs  - > / data2
    

    我们仅针对节点ID为2的数据节点显示此项; 但是,您必须为每个数据节点执行此操作

  • 现在,在mysql客户端中,使用符号链接创建一个日志文件组和表空间,如下所示:

    mysql> CREATE LOGFILE GROUP lg1
        - >     ADD UNDOFILE 'dnlogs/undo1.log'
        - >     INITIAL_SIZE 150M
        - >     UNDO_BUFFER_SIZE = 1M
        - >    ENGINE=NDBCLUSTER;
    
    mysql> CREATE TABLESPACE ts1
        - >     ADD DATAFILE 'dndata/data1.log'
        - >     USE LOGFILE GROUP lg1
        - >     INITIAL_SIZE 1G
        - >    ENGINE=NDBCLUSTER;
    

    验证文件是否已正确创建并正确放置,如下所示:

    shell> cd /data1
    shell>ls -l
    总计2099304
    -rw-rw-r-- 1个用户组157286400 2007-03-19 14:02 undo1.dat
    
    shell> cd /data2
    shell>ls -l
    总计2099304
    -rw-rw-r-- 1个用户组1073741824 2007-03-19 14:02 data1.dat
    
  • 如果您在一台主机上运行多个数据节点,则必须注意避免让它们尝试将相同的空间用于磁盘数据文件。您可以通过在每个数据节点文件系统中创建一个符号链接来简化操作。假设您正在使用/data0两个数据节点文件系统,但您希望两个节点上都有磁盘数据文件/data1在这种情况下,您可以执行与此处显示的内容类似的操作:

    shell> cd /data0
    shell> ln -s /data1/dn2 ndb_2_fs/dd
    shell> ln -s /data1/dn3 ndb_3_fs/dd
    shell>ls -l --hide=D* ndb_2_fs
    lrwxrwxrwx 1个用户组30 2007-03-19 14:22 dd  - > / data1 / dn2
    外壳> ls -l --hide=D* ndb_3_fs
    lrwxrwxrwx 1个用户组30 2007-03-19 14:22 dd  - > / data1 / dn3
    
  • 现在您可以使用符号链接创建日志文件组和表空间,如下所示:

    mysql> CREATE LOGFILE GROUP lg1
        - >     ADD UNDOFILE 'dd/undo1.log'
        - >     INITIAL_SIZE 150M
        - >     UNDO_BUFFER_SIZE = 1M
        - >    ENGINE=NDBCLUSTER;
    
    mysql> CREATE TABLESPACE ts1
        - >     ADD DATAFILE 'dd/data1.log'
        - >     USE LOGFILE GROUP lg1
        - >     INITIAL_SIZE 1G
        - >    ENGINE=NDBCLUSTER;
    

    验证文件是否已正确创建并正确放置,如下所示:

    shell> cd /data1
    shell>ls
    dn2 dn3
    外壳> ls dn2
    undo1.log data1.log
    外壳> ls dn3
    undo1.log data1.log
    

21.5.13.3 NDB集群磁盘数据存储要求

以下项目适用于磁盘数据存储要求:

  • 磁盘数据表的可变长度列占用固定的空间量。对于每一行,这等于为该列存储最大可能值所需的空间。

    有关计算这些值的一般信息,请参见 第11.8节“数据类型存储要求”

    您可以通过查询INFORMATION_SCHEMA.FILES来获得估计数据文件中可用空间的大小并撤消日志文件 有关更多信息和示例,请参见 第24.8节“INFORMATION_SCHEMA文件表”

    注意

    OPTIMIZE TABLE 声明对磁盘数据表没有任何影响。

  • 在“磁盘数据”表中,a TEXTBLOB的前256个字节 存储在内存中; 只有余数存储在磁盘上。

  • 磁盘数据表中的每一行都使用内存中的8个字节来指向存储在磁盘上的数据。这意味着,在某些情况下,将内存列转换为基于磁盘的格式实际上会导致更大的内存使用量。例如,将CHAR(4)列从基于内存的转换为基于磁盘的格式会将DataMemory每行使用量从4字节增加到8字节。

重要

使用该--initial 选项启动群集不会删除磁盘数据文件。在执行群集的初始重新启动之前,您必须手动删除这些文件。

磁盘数据表的性能可以通过确保磁盘DiskPageBufferMemory的大小足够小来减少磁盘查找次数来提高 您可以查询该 diskpagebuffer表以帮助确定是否需要增加此参数的值。

21.5.14在线添加NDB群集数据节点

本节介绍如何在线添加NDB群集数据节点, 即不需要完全关闭群集并将其作为该过程的一部分重新启动。

重要

目前,您必须将新数据节点作为新节点组的一部分添加到NDB群集。另外,不可能在线更改副本数量(或每个节点组的节点数量)。

21.5.14.1在线添加NDB群集数据节点:一般问题

本节提供有关在线添加NDB群集节点的行为和当前限制的一般信息。

数据重新分配。  在线添加新节点的能力包括重新组织NDBCLUSTER表数据和索引的方法,以便通过该ALTER TABLE ... REORGANIZE PARTITION语句在所有数据节点(包括新节点)上分布这些节点 支持内存和磁盘数据表的表重组。此重新分配目前不包含唯一索引(仅重新分配有序索引)。

NDBCLUSTER 添加新数据节点之前已经存在的表 的重新分配不是自动的,但可以使用mysql或其他MySQL客户端应用程序中的简单SQL语句来完成但是,添加到添加新节点组后创建的表中的所有数据和索引都将自动分配到所有群集数据节点中,包括作为新节点组的一部分添加的节点。

部分开始。  可以添加一个新节点组,但不启动所有新数据节点。也可以将新节点组添加到降级群集 - 即仅部分启动的群集,或者一个或多个数据节点未运行的位置。在后一种情况下,在添加新节点组之前,集群必须有足够的节点运行才可行。

对持续运营的影响。  使用NDB群集数据的正常DML操作不会因创建或添加新节点组或通过表重组而阻止。但是,不能在表重组的同时执行DDL,也就是说,ALTER TABLE ... REORGANIZE PARTITION执行语句时不能发出其他DDL语句 另外,在执行ALTER TABLE ... REORGANIZE PARTITION(或执行任何其他DDL语句)期间,无法重新启动集群数据节点。

失败处理。  数据节点在节点组创建和表重组期间的故障处理如下表所示:

表21.396节点组创建和表重组期间的数据节点故障处理

失败期间 数据节点失败 数据节点失败 系统错误
节点组创建
  • 如果主节点以外的节点出现故障:  节点组的创建始终前滚。

  • 如果主人失败: 

    • 如果已经达到内部提交点:  将前滚节点组的创建。

    • 如果尚未达到内部提交点。  回滚节点组的创建

  • 如果主节点以外的节点出现故障:  节点组的创建始终前滚。

  • 如果主人失败: 

    • 如果已经达到内部提交点:  将前滚节点组的创建。

    • 如果尚未达到内部提交点。  回滚节点组的创建

  • 如果CREATE NODEGROUP的执行已达到内部提交点:  重新启动时,群集将包含新节点组。否则它没有。

  • 如果CREATE NODEGROUP的执行尚未达到内部提交点:  重新启动时,群集不包含新节点组。

表重组
  • 如果主节点以外的节点发生故障:  表重组总是前滚。

  • 如果主人失败: 

    • 如果已经达到内部提交点:  表格重组向前滚动。

    • 如果尚未达到内部提交点。  表重组被回滚。

  • 如果主节点以外的节点发生故障:  表重组总是前滚。

  • 如果主人失败: 

    • 如果已经达到内部提交点:  表格重组向前滚动。

    • 如果尚未达到内部提交点。  表重组被回滚。

  • 如果ALTER TABLE ... REORGANIZE PARTITION语句的执行已到达内部提交点:  重新启动集群时,属于的数据和索引将 table使用数据节点进行分发

  • 如果执行ALTER TABLE ... REORGANIZE PARTITION语句尚未达到内部提交点:  重新启动集群时,属于的数据和索引 table仅使用数据节点进行分发


删除节点组。  所述ndb_mgm客户端支持一 DROP NODEGROUP命令,但是也可以删除一个节点组仅当节点组中没有数据节点包含任何数据。由于目前没有办法清空特定的数据节点或节点组,因此该命令仅适用于以下两种情况:

  1. 发行后CREATE NODEGROUPndb_mgm 客户端,但在此之前发出任何 ALTER TABLE ... REORGANIZE PARTITION语句中的 MySQL的客户端。

  2. 删除所有NDBCLUSTER 表后使用DROP TABLE

    TRUNCATE TABLE 不适用于此目的,因为数据节点继续存储表定义。

21.5.14.2在线添加NDB群集数据节点:基本过程

在本节中,我们列出了将新数据节点添加到NDB群集所需的基本步骤。无论您 对数据节点进程使用ndbd还是ndbmtd二进制文件,都适用此过程有关更详细的示例,请参见 第21.5.14.3节“在线添加NDB群集数据节点:详细示例”

假设您已经有一个正在运行的NDB群集,在线添加数据节点需要以下步骤:

  1. 编辑群集配置 config.ini文件,添加[ndbd]对应于要添加的节点的节。在集群使用多个管理服务器的情况下,需要对config.ini管理服务器使用的所有文件进行这些更改

    您必须小心,config.ini文件中添加的任何新数据节点的节点ID不会与现有节点使用的节点ID重叠。如果您的API节点使用动态分配的节点ID,并且这些ID与您希望用于新数据节点的节点ID匹配,则可以强制任何此类API节点 迁移,如本过程后面所述。

  2. 执行所有NDB集群管理服务器的滚动重启。

    重要

    所有管理服务器都必须使用--reload--initial选项重新启动 才能强制读取新配置。

  3. 执行所有现有NDB群集数据节点的滚动重启。--initial重新启动现有数据节点时不需要(或通常甚至不需要)

    如果您使用的API节点具有与您希望分配给新数据节点的任何节点ID相匹配的动态分配ID,则在重新启动此步骤中的任何数据节点进程之前,必须重新启动所有API节点(包括SQL节点)。这会导致任何先前未明确分配节点ID的API节点放弃这些节点ID并获取新节点ID。

  4. 执行连接到NDB群集的任何SQL或API节点的滚动重新启动。

  5. 启动新的数据节点。

    新的数据节点可以以任何顺序启动。它们也可以同时启动,只要它们在所有现有数据节点的滚动重新启动完成后启动,并且在继续下一步之前启动。

  6. CREATE NODEGROUP在NDB集群管理客户端中 执行一个或多个命令,以创建新数据节点所属的新节点组或节点组。

  7. 在所有数据节点之间重新分配群集数据,包括新数据节点。通常这是通过ALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION每个mysql客户端中 发布一条语句来完成的 NDBCLUSTER

    例外:对于使用该MAX_ROWS选项创建的表格 ,此语句不起作用; 相反,使用ALTER TABLE ... ALGORITHM=INPLACE MAX_ROWS=...重新组织这些表。您还应该记住,MAX_ROWS在NDB 7.5.4和更高版本中,以此方式使用来设置分区数量已被弃用,您应该在其中使用 该分区PARTITION_BALANCE; 有关更多信息请参见 第13.1.18.10节“设置NDB_TABLE选项”

    注意

    这只需要在新节点组添加时已经存在的表中完成。自动分配添加新节点组后创建的表中的数据; 然而,添加到添加tbl新节点之前存在的任何给定表的数据 不会使用新节点分发,直到该表被重新组织为止。

  8. ALTER TABLE ... REORGANIZE PARTITION ALGORITHM=INPLACE重新组织分区但不回收节点上释放的空间您可以通过为每个NDBCLUSTER发布mysql客户端中OPTIMIZE TABLE语句来完成此操作

    这适用于内存NDB表中可变宽度列使用的空间OPTIMIZE TABLE不适用于内存表的固定宽度列; 磁盘数据表也不受支持。

您可以添加所需的所有节点,然后CREATE NODEGROUP连续发出几个 命令以将新节点组添加到群集。

21.5.14.3在线添加NDB群集数据节点:详细示例

在本节中,我们提供了一个详细示例,说明如何在线添加新NDB群集数据节点,首先是在单个节点组中具有2个数据节点的NDB群集,最后是在2个节点组中具有4个数据节点的群集。

开始配置。  出于说明的目的,我们假设最小配置,并且群集使用config.ini仅包含以下信息文件:

[ndbd默认]
DataMemory = 100M
IndexMemory = 100M
NoOfReplicas = 2
DataDir = / usr / local / mysql / var / mysql-cluster

[NDBD]
Id = 1
HostName = 198.51.100.1

[NDBD]
Id = 2
HostName = 198.51.100.2

[MGM]
HostName = 198.51.100.10
Id = 10

[API]
ID = 20
HostName = 198.51.100.20

[API]
ID = 21
HostName = 198.51.100.21
注意

我们在数据节点ID和其他节点之间的序列中留下了空隙。这使得稍后可以更轻松地将尚未使用的节点ID分配给新添加的数据节点。

我们还假定您已经使用适当的命令行或my.cnf 选项启动了集群,并且SHOW在管理客户端中运行 的集群产生类似于此处显示的输出:

 -  NDB群集 - 管理客户端 - 
ndb_mgm> SHOW
连接到管理服务器:198.51.100.10:1186
群集配置
---------------------
[ndbd(NDB)] 2节点(s)
id = 1 @ 198.51.100.1(5.7.22-ndb-7.5.11,节点组:0,*)
id = 2 @ 198.51.100.2(5.7.22-ndb-7.5.11,节点组:0)

[ndb_mgmd(MGM)] 1个节点
id = 10 @ 198.51.100.10(5.7.22-ndb-7.5.11)

[mysqld(API)] 2节点(s)
id = 20 @ 198.51.100.20(5.7.22-ndb-7.5.11)
id = 21 @ 198.51.100.21(5.7.22-ndb-7.5.11)

最后,我们假设该集群包含一个NDBCLUSTER创建的单个 表,如下所示:

USE n;

CREATE TABLE ips(
    ID BIGINT不是NULL AUTO_INCREMENT PRIMARY KEY,
    country_code CHAR(2)NOT NULL,
    键入CHAR(4)NOT NULL,
    ip_address VARCHAR(15)NOT NULL,
    地址BIGINT UNSIGNED DEFAULT NULL,
    日期BIGINT UNSIGNED DEFAULT NULL
)ENGINE NDBCLUSTER;

本节后面显示的内存使用情况和相关信息是在向此表中插入大约50000行之后生成的。

注意

在这个例子中,我们展示了用于数据节点进程的单线程 ndbd您也可以套用这个例子中,如果您使用的是多线程ndbmtdndbmtdNDBD各处出现的后续步骤。

第1步:更新配置文件。  在文本编辑器中打开集群全局配置文件,并添加[ndbd]对应于2个新数据节点的部分。(我们给这些数据节点ID 3和4,并假设它们分别在地址198.51.100.3和198.51.100.4处的主机上运行。)在添加新节之后,config.ini文件的内容 应该看起来像就像这里显示的那样,文件的添加以粗体显示:

[ndbd默认]
DataMemory = 100M
IndexMemory = 100M
NoOfReplicas = 2
DataDir = / usr / local / mysql / var / mysql-cluster

[NDBD]
Id = 1
HostName = 198.51.100.1

[NDBD]
Id = 2
HostName = 198.51.100.2

[NDBD]
Id = 3
HostName = 198.51.100.3

[NDBD]
Id = 4
HostName = 198.51.100.4

[MGM]
HostName = 198.51.100.10
Id = 10

[API]
ID = 20
HostName = 198.51.100.20

[API]
ID = 21
HostName = 198.51.100.21

一旦你做了必要的修改,保存文件。

第2步:重新启动管理服务器。  重新启动集群管理服务器要求您发出单独的命令来停止管理服务器,然后再次启动它,如下所示:

  1. 使用管理客户端STOP命令停止管理服务器 ,如下所示:

    ndb_mgm> 10 STOP
    节点10已关闭。
    断开连接以允许Management Server关闭
    
    外壳>
    
  2. 由于关闭管理服务器会导致管理客户端终止,因此必须从系统shell启动管理服务器。为了简单起见,我们假定它config.ini与管理服务器二进制文件位于同一目录中,但实际上,您必须提供正确的配置文件路径。您还必须提供 --reload--initial选项,以便管理服务器从文件而不是其配置缓存中读取新配置。如果您的shell的当前目录也与管理服务器二进制文件所在的目录相同,那么您可以调用管理服务器,如下所示:

    外壳> ndb_mgmd -f config.ini --reload
    2008-12-08 17:29:23 [MgmSrvr] INFO  -  NDB集群管理服务器。22年7月5日 -  NDB-7.5.11
    2008-12-08 17:29:23 [MgmSrvr]信息 - 从'config.ini'读取群集配置
    

如果您SHOW在重新启动ndb_mgm进程检查管理客户端的输出, 现在应该看到如下所示的内容:

 -  NDB群集 - 管理客户端 - 
ndb_mgm> SHOW
连接到管理服务器:198.51.100.10:1186
群集配置
---------------------
[ndbd(NDB)] 2节点(s)
id = 1 @ 198.51.100.1(5.7.22-ndb-7.5.11,节点组:0,*)
id = 2 @ 198.51.100.2(5.7.22-ndb-7.5.11,节点组:0)
id = 3(未连接,接受来自198.51.100.3的连接)
id = 4(不连接,从198.51.100.4接受连接)

[ndb_mgmd(MGM)] 1个节点
id = 10 @ 198.51.100.10(5.7.22-ndb-7.5.11)

[mysqld(API)] 2节点(s)
id = 20 @ 198.51.100.20(5.7.22-ndb-7.5.11)
id = 21 @ 198.51.100.21(5.7.22-ndb-7.5.11)

步骤3:执行现有数据节点的滚动重启。  这一步可以完全在集群管理客户端内使用该 RESTART命令完成,如下所示:

ndb_mgm> 1 RESTART
节点1:启动节点关闭
节点1:节点关机完成,重新启动,不启动。
节点1正在重新启动

ndb_mgm>节点1:启动启动(版本7.5.11)
节点1:开始(版本7.5.11)

ndb_mgm> 2 RESTART
节点2:启动节点关闭
节点2:节点关机完成,重新启动,不启动。
节点2正在重新启动

ndb_mgm>节点2:启动启动(版本7.5.11)

ndb_mgm>节点2:已启动(版本7.5.11)
重要

发出每条X RESTART命令后,请等待管理客户端报告,然后再继续处理。 Node X: Started (version ...)

您可以通过检查mysql客户端中ndbinfo.nodes来验证所有现有数据节点是否已使用更新的配置重新启动

步骤4:执行所有群集API节点的滚动重启。  使用mysqladmin shutdown 然后mysqld_safe(或其他启动脚本)关闭并重新启动每个充当群集中SQL节点的MySQL服务器这应该与此处显示的内容类似,其中 passwordroot给定MySQL服务器实例的MySQL 密码:

外壳> mysqladmin -uroot -ppassword shutdown
081208 20:19:56来自pid文件的mysqld_safe mysqld
/usr/local/mysql/var/tonfisk.pid结束
外壳> mysqld_safe --ndbcluster --ndb-connectstring=198.51.100.10 &
081208 20:20:06 mysqld_safe记录到“/usr/local/mysql/var/tonfisk.err”。
081208 20:20:06 mysqld_safe用数据库启动mysqld守护进程
从/ usr / local / mysql / var

当然,确切的输入和输出取决于MySQL在系统上的安装方式和位置,以及您选择启动它的选项(以及某些或全部选项是否在my.cnf文件中指定)。

第5步:执行新数据节点的初始启动。  从新数据节点的每个主机上的系统shell中,使用以下--initial选项启动数据节点,如下所示

外壳> ndbd -c 198.51.100.10 --initial
注意

与重新启动现有数据节点的情况不同,您可以同时启动新的数据节点; 在开始另一个之前,您不需要等待一个人完成开始。

等到两个新数据节点都开始后再继续下一步一旦新的数据节点已经启动,您可以在管理客户端SHOW 命令的输出中看到它们还不属于任何节点组(如下所示,用粗体显示):

ndb_mgm> SHOW
连接到管理服务器:198.51.100.10:1186
群集配置
---------------------
[ndbd(NDB)] 2节点(s)
id = 1 @ 198.51.100.1(5.7.22-ndb-7.5.11,节点组:0,*)
id = 2 @ 198.51.100.2(5.7.22-ndb-7.5.11,节点组:0)
id = 3 @ 198.51.100.3(5.7.22-ndb-7.5.11,no nodegroup
id = 4 @ 198.51.100.4(5.7.22-ndb-7.5.11,no nodegroup 

[ndb_mgmd(MGM)] 1个节点
id = 10 @ 198.51.100.10(5.7.22-ndb-7.5.11)

[mysqld(API)] 2节点(s)
id = 20 @ 198.51.100.20(5.7.22-ndb-7.5.11)
id = 21 @ 198.51.100.21(5.7.22-ndb-7.5.11)

第6步:创建一个新的节点组。  您可以通过CREATE NODEGROUP在集群管理客户端中发出命令来完成此操作该命令以包含在新节点组中的数据节点的节点ID的逗号分隔列表作为其参数,如下所示:

ndb_mgm> CREATE NODEGROUP 3,4
节点组1已创建

SHOW再次 发出,您可以验证数据节点3和4是否已加入新节点组(再次以粗体显示):

ndb_mgm> SHOW
连接到管理服务器:198.51.100.10:1186
群集配置
---------------------
[ndbd(NDB)] 2节点(s)
id = 1 @ 198.51.100.1(5.7.22-ndb-7.5.11,节点组:0,*)
id = 2 @ 198.51.100.2(5.7.22-ndb-7.5.11,节点组:0)
id = 3 @ 198.51.100.3(5.7.22-ndb-7.5.11,节点组:1
id = 4 @ 198.51.100.4(5.7.22-ndb-7.5.11,节点组:1

[ndb_mgmd(MGM)] 1个节点
id = 10 @ 198.51.100.10(5.7.22-ndb-7.5.11)

[mysqld(API)] 2节点(s)
id = 20 @ 198.51.100.20(5.7.22-ndb-7.5.11)
id = 21 @ 198.51.100.21(5.7.22-ndb-7.5.11)

第7步:重新分配群集数据。  创建节点组时,现有数据和索引不会自动分发到新节点组的数据节点,正如您通过REPORT在管理客户端中发出相应命令所看到的那样

ndb_mgm> ALL REPORT MEMORY

节点1:数据使用率为5%(总共3200页共177页32K页)
节点1:索引使用率为0%(总共12832个108 8K页)
节点2:数据使用率为5%(共3232页共177页32K页)
节点2:索引使用率为0%(总共12832个108 8K页)
节点3:数据使用率为0%(总共3200页的32K页)
节点3:索引使用率为0%(总共12832个0 8K页)
节点4:数据使用率为0%(总共3200个32K页)
节点4:索引使用率为0%(总共12832个0 8K页)

通过使用选项的ndb_desc-p导致输出包含分区信息),可以看到该表仍然只使用2个分区(在Per partition info 输出部分中,以粗体显示):

外壳> ndb_desc -c 198.51.100.10 -d n ips -p
-  ips  - 
版本:1
片段类型:9
K值:6
最小载荷系数:78
最大负载率:80
临时表:没有
属性数量:6
主键数量:1
frm数据长度:340
行校验和:1
GCI行:1
SingleUserMode:0
ForceVarPart:1
FragmentCount:2
TableStatus:已检索
- 属性 - 
id Bigint主键分配键AT = FIXED ST = MEMORY AUTO_INCR
country_code Char(2; latin1_swedish_ci)NOT NULL AT = FIXED ST = MEMORY
键入Char(4; latin1_swedish_ci)NOT NULL AT = FIXED ST = MEMORY
ip_address Varchar(15; latin1_swedish_ci)NOT NULL AT = SHORT_VAR ST = MEMORY
地址Bigunsigned NULL AT = FIXED ST = MEMORY
date Bigunsigned NULL AT = FIXED ST = MEMORY

- 索引 - 
PRIMARY KEY(id) -  UniqueHashIndex
PRIMARY(id) -  OrderedIndex

 - 每个分区信息 - 
分区行计数提交计数碎片固定内存碎片变大的内存
0 26086 26086 1572864 557056
1 26329 26329 1605632 557056

NDBT_ProgramExit:0  - 确定

通过为每个NDB执行mysql客户端中ALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION 语句,可以使数据在所有数据节点间重新分配

重要

ALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION对使用该MAX_ROWS选项创建的表无效相反,使用 ALTER TABLE ... ALGORITHM=INPLACE, MAX_ROWS=...重新组织这些表。

请记住,MAX_ROWS在NDB 7.5.4和更高版本中,不建议使用设置每个表的分区数量,而应该使用NDB 7.5.4和更高版本 PARTITION_BALANCE; 有关更多信息请参见 第13.1.18.10节“设置NDB_TABLE选项”

在发布该语句之后ALTER TABLE ips ALGORITHM=INPLACE, REORGANIZE PARTITION,您可以看到使用ndb_desc表示此表的数据现在使用4个分区存储,如下所示(以粗体显示输出的相关部分):

外壳> ndb_desc -c 198.51.100.10 -d n ips -p
-  ips  - 
版本:16777217
片段类型:9
K值:6
最小载荷系数:78
最大负载率:80
临时表:没有
属性数量:6
主键数量:1
frm数据的长度:341
行校验和:1
GCI行:1
SingleUserMode:0
ForceVarPart:1
碎片数量:4
TableStatus:已检索
- 属性 - 
id Bigint主键分配键AT = FIXED ST = MEMORY AUTO_INCR
country_code Char(2; latin1_swedish_ci)NOT NULL AT = FIXED ST = MEMORY
键入Char(4; latin1_swedish_ci)NOT NULL AT = FIXED ST = MEMORY
ip_address Varchar(15; latin1_swedish_ci)NOT NULL AT = SHORT_VAR ST = MEMORY
地址Bigunsigned NULL AT = FIXED ST = MEMORY
date Bigunsigned NULL AT = FIXED ST = MEMORY

- 索引 - 
PRIMARY KEY(id) -  UniqueHashIndex
PRIMARY(id) -  OrderedIndex

 - 每个分区信息 - 
分区行计数提交计数碎片固定内存碎片变大的内存
0 12981 52296 1572864 557056
1 13236 52515 1605632 557056
2 13105 13105 819200 294912
3 13093 13093 819200 294912

NDBT_ProgramExit:0  - 确定
注意

通常,与分区标识符列表和一组分区定义一起使用,为已经明确分区的表创建新的分区方案。它在这里用于将数据重新分配到新的NDB群集节点组是一个例外; 当以这种方式使用时,不会有其他关键字或标识符出现ALTER TABLE table_name [ALGORITHM=INPLACE,] REORGANIZE PARTITIONREORGANIZE PARTITION

有关更多信息,请参见第13.1.8节“ALTER TABLE语法”

另外,对于每个表格,该 ALTER TABLE表述后面应该跟着一个 OPTIMIZE TABLE回收浪费的空间。您可以NDBCLUSTER针对该INFORMATION_SCHEMA.TABLES使用以下查询获取所有 表的 列表:

SELECT TABLE_SCHEMA,TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE ENGINE ='NDBCLUSTER';
注意

INFORMATION_SCHEMA.TABLES.ENGINE一个NDB簇表值始终是 NDBCLUSTER,不管是否CREATE TABLE使用语句创建(或表ALTER TABLE 使用现有的表从不同的存储引擎转换语句)使用NDBNDBCLUSTER在其 ENGINE选项。

在输出中执行这些语句后,您可以看到 ALL REPORT MEMORY数据和索引现在在所有群集数据节点之间重新分布,如下所示:

ndb_mgm> ALL REPORT MEMORY

节点1:数据使用率为5%(总共3200个页面为176个32K)
节点1:索引使用率为0%(总共12832个76 8K页)
节点2:数据使用率为5%(总共3200页共176页32K页)
节点2:索引使用率为0%(总共12832个76 8K页)
节点3:数据使用率为2%(总共3200个80个32K页)
节点3:索引使用率为0%(总共12832个51 8K页)
节点4:数据使用率为2%(总共3200个80个32K页)
节点4:索引使用率为0%(总共12832个50 8K页)
注意

由于一次只能NDBCLUSTER执行一个表上的DDL操作 ,因此必须等待每个 ALTER TABLE ... REORGANIZE PARTITION语句完成才能发出下一个语句。

没有必要为新数据节点添加创建ALTER TABLE ... REORGANIZE PARTITIONNDBCLUSTER发布 语句 ; 添加到这些表中的数据将自动分配到所有数据节点中。但是,在 添加新节点之前存在的表中, 使用这些表重新组织之前,现有数据和新数据都不会使用新节点进行分发 NDBCLUSTERALTER TABLE ... REORGANIZE PARTITION

备选程序,无需滚动重启。  在第一次启动集群时,可以通过配置额外的数据节点来避免滚动重新启动的需要,但不能启动它们。与以前一样,我们假设您希望从一个节点组中的两个数据节点(节点1和2)开始,然后通过添加由节点3和节点4组成的第二个节点组将其扩展为四个数据节点:

[ndbd默认]
DataMemory = 100M
IndexMemory = 100M
NoOfReplicas = 2
DataDir = / usr / local / mysql / var / mysql-cluster

[NDBD]
Id = 1
HostName = 198.51.100.1

[NDBD]
Id = 2
HostName = 198.51.100.2

[NDBD]
Id = 3
HostName = 198.51.100.3
节点组= 65536 

[NDBD]
Id = 4
HostName = 198.51.100.4
节点组= 65536 

[MGM]
HostName = 198.51.100.10
Id = 10

[API]
ID = 20
HostName = 198.51.100.20

[API]
ID = 21
HostName = 198.51.100.21

稍后要联机的数据节点(节点3和4)可以配置为 NodeGroup = 65536,在这种情况下,节点1和节点2可以分别启动,如下所示:

外壳> ndbd -c 198.51.100.10 --initial

配置的数据节点 NodeGroup = 65536由管理服务器处理,就像您--nowait-nodes=3,4 在等待由StartNoNodeGroupTimeout 数据节点配置参数设置确定的一段时间后 启动节点1和2一样默认情况下,这是15秒(15000毫秒)。

注意

StartNoNodegroupTimeout 对于群集中的所有数据节点必须相同; 因此,您应该始终将其设置在文件[ndbd default]部分中 config.ini,而不是单个数据节点中。

准备好添加第二个节点组时,只需执行以下附加步骤:

  1. 启动数据节点3和4,为每个新节点调用一次数据节点进程:

    外壳> ndbd -c 198.51.100.10 --initial
    
  2. CREATE NODEGROUP在管理客户端 发出适当的命令:

    ndb_mgm> CREATE NODEGROUP 3,4
    
  3. mysql客户端中,为每个现有发布 ALTER TABLE ... REORGANIZE PARTITIONOPTIMIZE TABLE语句NDBCLUSTER(如本节其他部分所述,现有的NDB簇表不能在数据分发完成之前使用新节点进行数据分发。)

21.5.15用于NDB群集的分布式MySQL权限

NDB群集支持在NDB群集中的所有SQL节点上分配MySQL用户和权限。此支持默认情况下未启用; 您应该按照本节所述的步骤进行操作。

通常,数据库中的每个MySQL服务器的用户权限表都 mysql必须使用 MyISAM存储引擎,这意味着在一个SQL节点上创建的用户帐户及其相关特权在集群的其他SQL节点上不可用。ndb_dist_priv.sql随NDB集群分发提供的SQL文件可以share在MySQL安装目录目录中找到

启用分布式特权的第一步是将此脚本加载到充当SQL节点的MySQL服务器中(我们在此之后将其称为 目标 SQL节点或MySQL服务器)。您可以通过在更改到其MySQL安装目录(其中options代表连接到此SQL节点所需的其他选项)后从目标SQL节点上的系统shell执行以下命令来执行 此操作:

外壳> mysql options -uroot < share/ndb_dist_priv.sql

导入ndb_dist_priv.sqlmysql在目标SQL节点上的数据库中创建大量存储例程(六个存储过程和一个存储函数)连接到mysql 客户端中的SQL节点(作为MySQL root用户)后,可以验证这些是如下所示创建的:

mysql> SELECT ROUTINE_NAME, ROUTINE_SCHEMA, ROUTINE_TYPE
    - >      FROM INFORMATION_SCHEMA.ROUTINES
    - >      WHERE ROUTINE_NAME LIKE 'mysql_cluster%'
    - >      ORDER BY ROUTINE_TYPE;
+ --------------------------------------------- + --- ------------- + -------------- +
| ROUTINE_NAME | ROUTINE_SCHEMA | ROUTINE_TYPE |
+ --------------------------------------------- + --- ------------- + -------------- +
| mysql_cluster_privileges_are_distributed | mysql | 功能|
| mysql_cluster_backup_privileges | mysql | 程序|
| mysql_cluster_move_grant_tables | mysql | 程序|
| mysql_cluster_move_privileges | mysql | 程序|
| mysql_cluster_restore_local_privileges | mysql | 程序|
| mysql_cluster_restore_privileges | mysql | 程序|
| mysql_cluster_restore_privileges_from_local | mysql | 程序|
+ --------------------------------------------- + --- ------------- + -------------- +
一组7行(0.01秒)

名为的存储过程将 mysql_cluster_move_privileges创建现有权限表的备份副本,然后将其转换为 NDB

mysql_cluster_move_privileges分两步执行备份和转换。第一步是调用 mysql_cluster_backup_privileges,它在mysql数据库中创建两组副本

  • 一组使用MyISAM存储引擎的本地副本 它们的名称是通过将后缀添加 _backup到原始特权表名称中生成的。

  • 一组使用NDBCLUSTER存储引擎的分布式副本 这些表是通过加前缀ndb_和追加_backup到原始表的名称来命名的。

创建副本后, mysql_cluster_move_privileges调用 mysql_cluster_move_grant_tables包含ALTER TABLE ... ENGINE = NDB将mysql系统表转换为语句NDB

通常情况下,你不应该调用 mysql_cluster_backup_privilegesmysql_cluster_move_grant_tables手动; 这些存储过程仅供使用 mysql_cluster_move_privileges

尽管原始特权表会自动备份,但在继续操作之前,在所有受影响的SQL节点上手动创建现有特权表的备份始终是个好主意。您可以使用mysqldump以类似于此处显示的方式执行此操作

shell> mysqldump options-uroot \
    mysql用户数据库tables_priv columns_priv procs_priv proxies_priv> backup_file

要执行转换,您必须使用mysql客户端连接到目标SQL节点(再次,作为MySQL root用户)。像这样调用存储过程:

MySQL的> CALL mysql.mysql_cluster_move_privileges();
查询OK,0行受影响(22.32秒)

根据特权表中的行数,此过程可能需要一些时间才能执行。如果某些特权表为空,则可能会看到一个或多个“ 无”数据 -mysql_cluster_move_privileges返回读取,选择或处理了零行警告在这种情况下,警告可能会被安全忽略。要验证转换是否成功,您可以使用存储的功能 mysql_cluster_privileges_are_distributed,如下所示:

mysql> SELECT CONCAT(
    - >     'Conversion ',
    - >     IF(mysql.mysql_cluster_privileges_are_distributed(), 'succeeded', 'failed'),
    - >     '.')
    - >    AS Result;
+ ----------------------- +
| 结果|
+ ----------------------- +
| 转换成功。|
+ ----------------------- +
一排(0.00秒)

mysql_cluster_privileges_are_distributed检查是否存在分布式特权表并 1在所有特权表分发时返回; 否则,它返回0

您可以验证是否使用诸如此类的查询创建了备份:

mysql> SELECT TABLE_NAME, ENGINE FROM INFORMATION_SCHEMA.TABLES
    - >      WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME LIKE '%backup'
    - >     ORDER BY ENGINE;
+ ------------------------- + ------------ +
| TABLE_NAME | ENGINE |
+ ------------------------- + ------------ +
| db_backup | MyISAM |
| user_backup | MyISAM |
| columns_priv_backup | MyISAM |
| tables_priv_backup | MyISAM |
| proxies_priv_backup | MyISAM |
| procs_priv_backup | MyISAM |
| ndb_columns_priv_backup | ndbcluster |
| ndb_user_backup | ndbcluster |
| ndb_tables_priv_backup | ndbcluster |
| ndb_proxies_priv_backup | ndbcluster |
| ndb_procs_priv_backup | ndbcluster |
| ndb_db_backup | ndbcluster |
+ ------------------------- + ------------ +
一套12行(0.00秒)

一旦转换为分布式权限,任何时候MySQL用户帐户被创建,删除或在任何SQL节点上都更新其权限,这些更改立即在连接到群集的所有其他MySQL服务器上生效。一旦分配权限,连接到群集的任何新的MySQL服务器都会自动参与分配。

注意

对于在执行时连接到SQL节点的客户端 mysql_cluster_move_privileges,您可能需要FLUSH PRIVILEGES在这些SQL节点上执行操作,或断开连接并重新连接客户端,以便这些客户端能够查看特权中的更改。

所有MySQL用户权限分布在所有连接的MySQL服务器上。这包括与视图和存储例程相关的任何特权,即使当前不支持视图和存储例程本身的分配。

如果SQL节点在mysql_cluster_move_privileges运行时与群集断开连接,则必须使用类似下面的语句在重新连接到群集后删除其权限表 DROP TABLE IF EXISTS mysql.user mysql.db mysql.tables_priv mysql.columns_priv mysql.procs_priv这会导致SQL节点使用共享权限表而不是它们自己的本地版本。第一次将新的SQL节点连接到群集时,这不是必需的。

如果整个群集初始重新启动(所有数据节点关闭,然后再次启动 --initial),则共享权限表将丢失。如果发生这种情况,您可以使用原始目标SQL节点来恢复它们,mysql_cluster_move_privileges或者使用由mysqldump创建的转储文件创建的备份来恢复它们 如果您需要使用新的MySQL服务器来执行恢复,则应--skip-grant-tables在首次连接到群集时启动它; 在此之后,您可以在本地恢复权限表,然后再使用它们分发它们mysql_cluster_move_privileges在恢复和分发这些表之后,您应该重新启动这个没有--skip-grant-tables选项的MySQL服务器

您也可以恢复使用分布式表 ndb_restore --restore-privilege-tables 使用制作的备份START BACKUPndb_mgm客户端。MyISAM创建mysql_cluster_move_privileges不会由START BACKUP命令备份)。 默认情况下,ndb_restore不会恢复特权表; --restore-privilege-tables 选项会导致它这样做。

您可以使用两种过程中的任意一种来恢复SQL节点的本地权限。 mysql_cluster_restore_privileges工作如下:

  1. 如果mysql.ndb_*_backup表格的副本可用,请尝试从这些副本恢复系统表格。

  2. 否则,尝试从名为*_backup(不带 ndb_前缀)的本地备份中恢复系统表

另一个名为named的过程 mysql_cluster_restore_local_privileges仅从本地备份中恢复系统表,而不检查ndb_*备份。

系统表重新创建 mysql_cluster_restore_privilegesmysql_cluster_restore_local_privileges使用MySQL服务器的默认存储引擎; 它们不以任何方式共享或分发,也不使用NDB集群的 NDB存储引擎。

额外的存储过程 mysql_cluster_restore_privileges_from_local旨在用于 mysql_cluster_restore_privilegesmysql_cluster_restore_local_privileges它不应该直接调用。

重要

直接访问NDB集群数据的应用程序(包括NDB API和ClusterJ应用程序)不受MySQL特权系统的限制。这意味着,一旦你分配了授权表,它们可以被这些应用程序自由地访问,就像它们可以在任何其他NDB 表中一样。尤其是,您应该记住, NDB API和ClusterJ应用程序可以无限制地读取和写入分布式授权表的用户名,主机名,密码哈希以及任何其他内容

21.5.16 NDB API统计计数器和变量

可以使用许多与由Ndb 对象执行的动作有关的统计计数器类型这些行动包括开始和结束(或放弃)交易; 主键和唯一键操作; 表格,范围和修剪扫描; 线程在等待完成各种操作时被阻塞; 以及由...发送和接收的数据和事件NDBCLUSTER每当进行NDB API调用或将数据发送到数据节点或由数据节点接收数据时,计数器就会在NDB内核中递增。 mysqld将这些计数器作为系统状态变量公开; 它们的值可以在输出中读取SHOW STATUS,或通过查询 INFORMATION_SCHEMA.SESSION_STATUS or 来读取 INFORMATION_SCHEMA.GLOBAL_STATUS 表。通过比较对NDB表进行操作前后的值,可以观察API级别上执行的相应操作,从而执行语句的成本。

您可以使用以下SHOW STATUS语句列出所有这些状态变量

MySQL的> SHOW STATUS LIKE 'ndb_api%';
+ -------------------------------------------- + ---- ------ +
| 变量名| 值|
+ -------------------------------------------- + ---- ------ +
| Ndb_api_wait_exec_complete_count_session | 0 |
| Ndb_api_wait_scan_result_count_session | 0 |
| Ndb_api_wait_meta_request_count_session | 0 |
| Ndb_api_wait_nanos_count_session | 0 |
| Ndb_api_bytes_sent_count_session | 0 |
| Ndb_api_bytes_received_count_session | 0 |
| Ndb_api_trans_start_count_session | 0 |
| Ndb_api_trans_commit_count_session | 0 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 0 |
| Ndb_api_pk_op_count_session | 0 |
| Ndb_api_uk_op_count_session | 0 |
| Ndb_api_table_scan_count_session | 0 |
| Ndb_api_range_scan_count_session | 0 |
| Ndb_api_pruned_scan_count_session | 0 |
| Ndb_api_scan_batch_count_session | 0 |
| Ndb_api_read_row_count_session | 0 |
| Ndb_api_trans_local_read_row_count_session | 0 |
| Ndb_api_event_data_count_injector | 0 |
| Ndb_api_event_nondata_count_injector | 0 |
| Ndb_api_event_bytes_count_injector | 0 |
| Ndb_api_wait_exec_complete_count_slave | 0 |
| Ndb_api_wait_scan_result_count_slave | 0 |
| Ndb_api_wait_meta_request_count_slave | 0 |
| Ndb_api_wait_nanos_count_slave | 0 |
| Ndb_api_bytes_sent_count_slave | 0 |
| Ndb_api_bytes_received_count_slave | 0 |
| Ndb_api_trans_start_count_slave | 0 |
| Ndb_api_trans_commit_count_slave | 0 |
| Ndb_api_trans_abort_count_slave | 0 |
| Ndb_api_trans_close_count_slave | 0 |
| Ndb_api_pk_op_count_slave | 0 |
| Ndb_api_uk_op_count_slave | 0 |
| Ndb_api_table_scan_count_slave | 0 |
| Ndb_api_range_scan_count_slave | 0 |
| Ndb_api_pruned_scan_count_slave | 0 |
| Ndb_api_scan_batch_count_slave | 0 |
| Ndb_api_read_row_count_slave | 0 |
| Ndb_api_trans_local_read_row_count_slave | 0 |
| Ndb_api_wait_exec_complete_count | 2 |
| Ndb_api_wait_scan_result_count | 3 |
| Ndb_api_wait_meta_request_count | 27 |
| Ndb_api_wait_nanos_count | 45612023 |
| Ndb_api_bytes_sent_count | 992 |
| Ndb_api_bytes_received_count | 9640 |
| Ndb_api_trans_start_count | 2 |
| Ndb_api_trans_commit_count | 1 |
| Ndb_api_trans_abort_count | 0 |
| Ndb_api_trans_close_count | 2 |
| Ndb_api_pk_op_count | 1 |
| Ndb_api_uk_op_count | 0 |
| Ndb_api_table_scan_count | 1 |
| Ndb_api_range_scan_count | 0 |
| Ndb_api_pruned_scan_count | 0 |
| Ndb_api_scan_batch_count | 0 |
| Ndb_api_read_row_count | 1 |
| Ndb_api_trans_local_read_row_count | 1 |
| Ndb_api_event_data_count | 0 |
| Ndb_api_event_nondata_count | 0 |
| Ndb_api_event_bytes_count | 0 |
+ -------------------------------------------- + ---- ------ +
60行(0.02秒)

这些状态变量也可以从 SESSION_STATUSGLOBAL_STATUS 该表的INFORMATION_SCHEMA数据库,如下所示:

mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS 
    - >   WHERE VARIABLE_NAME LIKE 'ndb_api%';
+ -------------------------------------------- + ---- ------------ +
| VARIABLE_NAME | VARIABLE_VALUE |
+ -------------------------------------------- + ---- ------------ +
| NDB_API_WAIT_EXEC_COMPLETE_COUNT_SESSION | 2 |
| NDB_API_WAIT_SCAN_RESULT_COUNT_SESSION | 0 |
| NDB_API_WAIT_META_REQUEST_COUNT_SESSION | 1 |
| NDB_API_WAIT_NANOS_COUNT_SESSION | 8144375 |
| NDB_API_BYTES_SENT_COUNT_SESSION | 68 |
| NDB_API_BYTES_RECEIVED_COUNT_SESSION | 84 |
| NDB_API_TRANS_START_COUNT_SESSION | 1 |
| NDB_API_TRANS_COMMIT_COUNT_SESSION | 1 |
| NDB_API_TRANS_ABORT_COUNT_SESSION | 0 |
| NDB_API_TRANS_CLOSE_COUNT_SESSION | 1 |
| NDB_API_PK_OP_COUNT_SESSION | 1 |
| NDB_API_UK_OP_COUNT_SESSION | 0 |
| NDB_API_TABLE_SCAN_COUNT_SESSION | 0 |
| NDB_API_RANGE_SCAN_COUNT_SESSION | 0 |
| NDB_API_PRUNED_SCAN_COUNT_SESSION | 0 |
| NDB_API_SCAN_BATCH_COUNT_SESSION | 0 |
| NDB_API_READ_ROW_COUNT_SESSION | 1 |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT_SESSION | 1 |
| NDB_API_EVENT_DATA_COUNT_INJECTOR | 0 |
| NDB_API_EVENT_NONDATA_COUNT_INJECTOR | 0 |
| NDB_API_EVENT_BYTES_COUNT_INJECTOR | 0 |
| NDB_API_WAIT_EXEC_COMPLETE_COUNT_SLAVE | 0 |
| NDB_API_WAIT_SCAN_RESULT_COUNT_SLAVE | 0 |
| NDB_API_WAIT_META_REQUEST_COUNT_SLAVE | 0 |
| NDB_API_WAIT_NANOS_COUNT_SLAVE | 0 |
| NDB_API_BYTES_SENT_COUNT_SLAVE | 0 |
| NDB_API_BYTES_RECEIVED_COUNT_SLAVE | 0 |
| NDB_API_TRANS_START_COUNT_SLAVE | 0 |
| NDB_API_TRANS_COMMIT_COUNT_SLAVE | 0 |
| NDB_API_TRANS_ABORT_COUNT_SLAVE | 0 |
| NDB_API_TRANS_CLOSE_COUNT_SLAVE | 0 |
| NDB_API_PK_OP_COUNT_SLAVE | 0 |
| NDB_API_UK_OP_COUNT_SLAVE | 0 |
| NDB_API_TABLE_SCAN_COUNT_SLAVE | 0 |
| NDB_API_RANGE_SCAN_COUNT_SLAVE | 0 |
| NDB_API_PRUNED_SCAN_COUNT_SLAVE | 0 |
| NDB_API_SCAN_BATCH_COUNT_SLAVE | 0 |
| NDB_API_READ_ROW_COUNT_SLAVE | 0 |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT_SLAVE | 0 |
| NDB_API_WAIT_EXEC_COMPLETE_COUNT | 4 |
| NDB_API_WAIT_SCAN_RESULT_COUNT | 3 |
| NDB_API_WAIT_META_REQUEST_COUNT | 28 |
| NDB_API_WAIT_NANOS_COUNT | 53756398 |
| NDB_API_BYTES_SENT_COUNT | 1060 |
| NDB_API_BYTES_RECEIVED_COUNT | 9724 |
| NDB_API_TRANS_START_COUNT | 3 |
| NDB_API_TRANS_COMMIT_COUNT | 2 |
| NDB_API_TRANS_ABORT_COUNT | 0 |
| NDB_API_TRANS_CLOSE_COUNT | 3 |
| NDB_API_PK_OP_COUNT | 2 |
| NDB_API_UK_OP_COUNT | 0 |
| NDB_API_TABLE_SCAN_COUNT | 1 |
| NDB_API_RANGE_SCAN_COUNT | 0 |
| NDB_API_PRUNED_SCAN_COUNT | 0 |
| NDB_API_SCAN_BATCH_COUNT | 0 |
| NDB_API_READ_ROW_COUNT | 2 |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT | 2 |
| NDB_API_EVENT_DATA_COUNT | 0 |
| NDB_API_EVENT_NONDATA_COUNT | 0 |
| NDB_API_EVENT_BYTES_COUNT | 0 |
+ -------------------------------------------- + ---- ------------ +
60行(0.00秒)

mysql> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS
    - >     WHERE VARIABLE_NAME LIKE 'ndb_api%';
+ -------------------------------------------- + ---- ------------ +
| VARIABLE_NAME | VARIABLE_VALUE |
+ -------------------------------------------- + ---- ------------ +
| NDB_API_WAIT_EXEC_COMPLETE_COUNT_SESSION | 2 |
| NDB_API_WAIT_SCAN_RESULT_COUNT_SESSION | 0 |
| NDB_API_WAIT_META_REQUEST_COUNT_SESSION | 1 |
| NDB_API_WAIT_NANOS_COUNT_SESSION | 8144375 |
| NDB_API_BYTES_SENT_COUNT_SESSION | 68 |
| NDB_API_BYTES_RECEIVED_COUNT_SESSION | 84 |
| NDB_API_TRANS_START_COUNT_SESSION | 1 |
| NDB_API_TRANS_COMMIT_COUNT_SESSION | 1 |
| NDB_API_TRANS_ABORT_COUNT_SESSION | 0 |
| NDB_API_TRANS_CLOSE_COUNT_SESSION | 1 |
| NDB_API_PK_OP_COUNT_SESSION | 1 |
| NDB_API_UK_OP_COUNT_SESSION | 0 |
| NDB_API_TABLE_SCAN_COUNT_SESSION | 0 |
| NDB_API_RANGE_SCAN_COUNT_SESSION | 0 |
| NDB_API_PRUNED_SCAN_COUNT_SESSION | 0 |
| NDB_API_SCAN_BATCH_COUNT_SESSION | 0 |
| NDB_API_READ_ROW_COUNT_SESSION | 1 |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT_SESSION | 1 |
| NDB_API_EVENT_DATA_COUNT_INJECTOR | 0 |
| NDB_API_EVENT_NONDATA_COUNT_INJECTOR | 0 |
| NDB_API_EVENT_BYTES_COUNT_INJECTOR | 0 |
| NDB_API_WAIT_EXEC_COMPLETE_COUNT_SLAVE | 0 |
| NDB_API_WAIT_SCAN_RESULT_COUNT_SLAVE | 0 |
| NDB_API_WAIT_META_REQUEST_COUNT_SLAVE | 0 |
| NDB_API_WAIT_NANOS_COUNT_SLAVE | 0 |
| NDB_API_BYTES_SENT_COUNT_SLAVE | 0 |
| NDB_API_BYTES_RECEIVED_COUNT_SLAVE | 0 |
| NDB_API_TRANS_START_COUNT_SLAVE | 0 |
| NDB_API_TRANS_COMMIT_COUNT_SLAVE | 0 |
| NDB_API_TRANS_ABORT_COUNT_SLAVE | 0 |
| NDB_API_TRANS_CLOSE_COUNT_SLAVE | 0 |
| NDB_API_PK_OP_COUNT_SLAVE | 0 |
| NDB_API_UK_OP_COUNT_SLAVE | 0 |
| NDB_API_TABLE_SCAN_COUNT_SLAVE | 0 |
| NDB_API_RANGE_SCAN_COUNT_SLAVE | 0 |
| NDB_API_PRUNED_SCAN_COUNT_SLAVE | 0 |
| NDB_API_SCAN_BATCH_COUNT_SLAVE | 0 |
| NDB_API_READ_ROW_COUNT_SLAVE | 0 |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT_SLAVE | 0 |
| NDB_API_WAIT_EXEC_COMPLETE_COUNT | 4 |
| NDB_API_WAIT_SCAN_RESULT_COUNT | 3 |
| NDB_API_WAIT_META_REQUEST_COUNT | 28 |
| NDB_API_WAIT_NANOS_COUNT | 53756398 |
| NDB_API_BYTES_SENT_COUNT | 1060 |
| NDB_API_BYTES_RECEIVED_COUNT | 9724 |
| NDB_API_TRANS_START_COUNT | 3 |
| NDB_API_TRANS_COMMIT_COUNT | 2 |
| NDB_API_TRANS_ABORT_COUNT | 0 |
| NDB_API_TRANS_CLOSE_COUNT | 3 |
| NDB_API_PK_OP_COUNT | 2 |
| NDB_API_UK_OP_COUNT | 0 |
| NDB_API_TABLE_SCAN_COUNT | 1 |
| NDB_API_RANGE_SCAN_COUNT | 0 |
| NDB_API_PRUNED_SCAN_COUNT | 0 |
| NDB_API_SCAN_BATCH_COUNT | 0 |
| NDB_API_READ_ROW_COUNT | 2 |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT | 2 |
| NDB_API_EVENT_DATA_COUNT | 0 |
| NDB_API_EVENT_NONDATA_COUNT | 0 |
| NDB_API_EVENT_BYTES_COUNT | 0 |
+ -------------------------------------------- + ---- ------------ +
60行(0.00秒)

每个Ndb对象都有自己的计数器。NDB API应用程序可以读取计数器的值以用于优化或监视。对于同时使用多个Ndb 对象的多线程客户端,也可以Ndb从属于给定对象的所有对象中 获取计数器的总计视图Ndb_cluster_connection

四套这些柜台都是暴露的。一套仅适用于本届会议; 其他3个是全球性的。尽管它们的值可以作为mysql 客户端中的会话或全局状态变量来获得这意味着,指定 SESSIONor GLOBAL关键字SHOW STATUS对报告的NDB API统计信息状态变量的值没有影响,无论该值是从SESSION_STATUSGLOBAL_STATUS的等效列中获得的,则这些变量中的每一个的值都是相同

  • 会话计数器(特定于会话)

    会话计数器与Ndb(仅)当前会话正在使用对象相关 其他MySQL客户端使用这些对象不会影响这些计数。

    为了最大限度地减少与标准MySQL会话变量的混淆,我们将与这些NDB API会话计数器相对应的变量称为_session 变量,并带有前导下划线。

  • 从站计数器(全局)

    这组计数器与Ndb复制从属SQL线程使用对象相关(如果有的话)。如果这个 mysqld不作为复制从服务器,或者不使用NDB表,那么所有这些计数都是0。

    我们将相关状态变量称为 _slave变量(带有前导下划线)。

  • 喷油器计数器(全球)

    喷油器计数器与Ndb用于通过二进制日志注入器线程监听集群事件对象相关 即使不编写二进制日志,连接到NDB群集的mysqld进程也会继续监听一些事件,例如模式更改。

    我们将与NDB API注入计数器相对应的状态变量称为_injector 变量(带有前导下划线)。

  • 服务器(全局)计数器(全局)

    这组计数器涉及Ndb这个mysqld当前使用的所有 对象这包括所有MySQL客户端应用程序,从属SQL线程(如果有),binlog注入器和NDB实用程序线程。

    我们将与这些计数器相对应的状态变量称为全局变量mysqld -level变量

可以通过为子串附加滤波获得用于特定的一组变量的值 sessionslaveinjector在变量名(连同公共前缀Ndb_api)。对于 _session变量,这可以按照如下所示完成:

MySQL的> SHOW STATUS LIKE 'ndb_api%session';
+ -------------------------------------------- + ---- ----- +
| 变量名| 值|
+ -------------------------------------------- + ---- ----- +
| Ndb_api_wait_exec_complete_count_session | 2 |
| Ndb_api_wait_scan_result_count_session | 0 |
| Ndb_api_wait_meta_request_count_session | 1 |
| Ndb_api_wait_nanos_count_session | 8144375 |
| Ndb_api_bytes_sent_count_session | 68 |
| Ndb_api_bytes_received_count_session | 84 |
| Ndb_api_trans_start_count_session | 1 |
| Ndb_api_trans_commit_count_session | 1 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 1 |
| Ndb_api_pk_op_count_session | 1 |
| Ndb_api_uk_op_count_session | 0 |
| Ndb_api_table_scan_count_session | 0 |
| Ndb_api_range_scan_count_session | 0 |
| Ndb_api_pruned_scan_count_session | 0 |
| Ndb_api_scan_batch_count_session | 0 |
| Ndb_api_read_row_count_session | 1 |
| Ndb_api_trans_local_read_row_count_session | 1 |
+ -------------------------------------------- + ---- ----- +
18行(0.50秒)

要获取NDB API mysqld -level状态变量的列表,请筛选变量名称, ndb_api_count以此结尾 ,如下所示:

mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
    - >     WHERE VARIABLE_NAME LIKE 'ndb_api%count';
+ ------------------------------------ + ------------ ---- +
| VARIABLE_NAME | VARIABLE_VALUE |
+ ------------------------------------ + ------------ ---- +
| NDB_API_WAIT_EXEC_COMPLETE_COUNT | 4 |
| NDB_API_WAIT_SCAN_RESULT_COUNT | 3 |
| NDB_API_WAIT_META_REQUEST_COUNT | 28 |
| NDB_API_WAIT_NANOS_COUNT | 53756398 |
| NDB_API_BYTES_SENT_COUNT | 1060 |
| NDB_API_BYTES_RECEIVED_COUNT | 9724 |
| NDB_API_TRANS_START_COUNT | 3 |
| NDB_API_TRANS_COMMIT_COUNT | 2 |
| NDB_API_TRANS_ABORT_COUNT | 0 |
| NDB_API_TRANS_CLOSE_COUNT | 3 |
| NDB_API_PK_OP_COUNT | 2 |
| NDB_API_UK_OP_COUNT | 0 |
| NDB_API_TABLE_SCAN_COUNT | 1 |
| NDB_API_RANGE_SCAN_COUNT | 0 |
| NDB_API_PRUNED_SCAN_COUNT | 0 |
| NDB_API_SCAN_BATCH_COUNT | 0 |
| NDB_API_READ_ROW_COUNT | 2 |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT | 2 |
| NDB_API_EVENT_DATA_COUNT | 0 |
| NDB_API_EVENT_NONDATA_COUNT | 0 |
| NDB_API_EVENT_BYTES_COUNT | 0 |
+ ------------------------------------ + ------------ ---- +
21行(0.09秒)

并非所有计数器都反映在所有4组状态变量中。对于事件计数器DataEventsRecvdCountNondataEventsRecvdCount和,以及 EventBytesRecvdCountonly _injectormysqld -level NDB API状态变量可用:

MySQL的> SHOW STATUS LIKE 'ndb_api%event%';
+ -------------------------------------- + ------- +
| 变量名| 值|
+ -------------------------------------- + ------- +
| Ndb_api_event_data_count_injector | 0 |
| Ndb_api_event_nondata_count_injector | 0 |
| Ndb_api_event_bytes_count_injector | 0 |
| Ndb_api_event_data_count | 0 |
| Ndb_api_event_nondata_count | 0 |
| Ndb_api_event_bytes_count | 0 |
+ -------------------------------------- + ------- +
设置6行(0.00秒)

_injector 状态变量未针对任何其他NDB API计数器实现,如下所示:

MySQL的> SHOW STATUS LIKE 'ndb_api%injector%';
+ -------------------------------------- + ------- +
| 变量名| 值|
+ -------------------------------------- + ------- +
| Ndb_api_event_data_count_injector | 0 |
| Ndb_api_event_nondata_count_injector | 0 |
| Ndb_api_event_bytes_count_injector | 0 |
+ -------------------------------------- + ------- +
设置3行(0.00秒)

状态变量的名称可以很容易地与相应计数器的名称相关联。下表列出了每个NDB API统计计数器的描述以及与此计数器相对应的任何MySQL服务器状态变量的名称。

表21.397 NDB API统计计数器

柜台名称 描述 状态变量(按统计类型):
  • 会议

  • 奴隶

  • 注射器

  • 服务器

WaitExecCompleteCount 在等待执行完成操作时线程被阻塞的次数。包含所有 execute() 调用以及隐式执行blob操作和自动增量客户端不可见。
WaitScanResultCount 线程在等待基于扫描的信号时被阻塞的次数,例如等待附加结果或扫描关闭。
WaitMetaRequestCount 线程被阻塞等待基于元数据的信号的次数; 这可能发生在等待DDL操作或启动(或结束)纪元时。
WaitNanosCount 用于等待来自数据节点的某种类型的信号的总时间(以纳秒为单位)。
BytesSentCount 发送到数据节点的数据量(以字节为单位)
BytesRecvdCount 从数据节点接收的数据量(以字节为单位)
TransStartCount 已开始的交易数量。
TransCommitCount 交易次数。
TransAbortCount 事务数已中止。
TransCloseCount 事务数已中止。(这个值可能大于和的TransCommitCountTransAbortCount。)
PkOpCount 基于或使用主键的操作数。此计数包括blob-part表操作,隐式解锁操作和自动递增操作,以及MySQL客户端通常可见的主键操作。
UkOpCount 基于或使用唯一密钥的操作数。
TableScanCount 已启动的表扫描数。这包括内部表格的扫描。
RangeScanCount 已经开始的范围扫描的数量。
PrunedScanCount 已经修剪到单个分区的扫描数量。
ScanBatchCount 接收的行数量。在此上下文中的批次是来自单个片段的一组扫描结果。)
ReadRowCount 已读取的总行数。包括使用主键,唯一键和扫描操作读取的行。
TransLocalReadRowCount 从正在运行事务的数据相同节点读取的行数。
DataEventsRecvdCount 收到的行更改事件的数量。
NondataEventsRecvdCount 收到的事件数,除行更改事件外。
EventBytesRecvdCount 收到的事件的字节数。

要查看已提交事务的所有计数(即所有 TransCommitCount计数器状态变量),可以筛选SHOW STATUS子字符串 的结果 trans_commit_count,如下所示:

MySQL的> SHOW STATUS LIKE '%trans_commit_count%';
+ ------------------------------------ + ------- +
| 变量名| 值|
+ ------------------------------------ + ------- +
| Ndb_api_trans_commit_count_session | 1 |
| Ndb_api_trans_commit_count_slave | 0 |
| Ndb_api_trans_commit_count | 2 |
+ ------------------------------------ + ------- +
设置3行(0.00秒)

从这里你可以确定1个事务已经在当前的mysql客户端会话中被提交,并且 自它上次重新启动以来已经在这个mysqld上提交了2个事务

您可以通过_session在执行语句之前和之后立即比较相应的状态变量的值来查看给定的SQL语句如何增加各种NDB API计数器 在这个例子中,在获取初始值之后SHOW STATUS,我们在test 数据库中创建一个NDB名为t,它具有单个列:

MySQL的> SHOW STATUS LIKE 'ndb_api%session%';
+ -------------------------------------------- + ---- ---- +
| 变量名| 值|
+ -------------------------------------------- + ---- ---- +
| Ndb_api_wait_exec_complete_count_session | 2 |
| Ndb_api_wait_scan_result_count_session | 0 |
| Ndb_api_wait_meta_request_count_session | 3 |
| Ndb_api_wait_nanos_count_session | 820705 |
| Ndb_api_bytes_sent_count_session | 132 |
| Ndb_api_bytes_received_count_session | 372 |
| Ndb_api_trans_start_count_session | 1 |
| Ndb_api_trans_commit_count_session | 1 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 1 |
| Ndb_api_pk_op_count_session | 1 |
| Ndb_api_uk_op_count_session | 0 |
| Ndb_api_table_scan_count_session | 0 |
| Ndb_api_range_scan_count_session | 0 |
| Ndb_api_pruned_scan_count_session | 0 |
| Ndb_api_scan_batch_count_session | 0 |
| Ndb_api_read_row_count_session | 1 |
| Ndb_api_trans_local_read_row_count_session | 1 |
+ -------------------------------------------- + ---- ---- +
18行(0.00秒)

MySQL的> USE test;
数据库改变
MySQL的> CREATE TABLE t (c INT) ENGINE NDBCLUSTER;
查询OK,0行受影响(0.85秒)

现在您可以执行一条新SHOW STATUS语句并观察更改,如下所示(输出中突出显示更改的行):

MySQL的> SHOW STATUS LIKE 'ndb_api%session%';
+ -------------------------------------------- + ---- ------- +
| 变量名| 值|
+ -------------------------------------------- + ---- ------- + 
| Ndb_api_wait_exec_complete_count_session | 8 |
| Ndb_api_wait_scan_result_count_session | 0 |
| Ndb_api_wait_meta_request_count_session | 17 | 
| Ndb_api_wait_nanos_count_session | 706871709 | 
| Ndb_api_bytes_sent_count_session | 2376 | 
| Ndb_api_bytes_received_count_session | 3844 | 
| Ndb_api_trans_start_count_session | 4 | 
| Ndb_api_trans_commit_count_session | 4 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 4 | 
| Ndb_api_pk_op_count_session | 6 |
| Ndb_api_uk_op_count_session | 0 |
| Ndb_api_table_scan_count_session | 0 |
| Ndb_api_range_scan_count_session | 0 |
| Ndb_api_pruned_scan_count_session | 0 |
| Ndb_api_scan_batch_count_session | 0 |
| Ndb_api_read_row_count_session | 2 |
| Ndb_api_trans_local_read_row_count_session | 1 |
+ -------------------------------------------- + ---- ------- +
18行(0.00秒)

同样,您可以在插入行时看到NDB API统计信息计数器中的更改t:插入行,然后运行SHOW STATUS上例中使用的相同语句,如下所示:

MySQL的> INSERT INTO t VALUES (100);
查询OK,1行受影响(0.00秒)

MySQL的> SHOW STATUS LIKE 'ndb_api%session%';
+ -------------------------------------------- + ---- ------- +
| 变量名| 值|
+ -------------------------------------------- + ---- ------- +
| Ndb_api_wait_exec_complete_count_session | 11 | 
| Ndb_api_wait_scan_result_count_session | 6 | 
| Ndb_api_wait_meta_request_count_session | 20 | 
| Ndb_api_wait_nanos_count_session | 707370418 | 
| Ndb_api_bytes_sent_count_session | 2724 | 
| Ndb_api_bytes_received_count_session | 4116 | 
| Ndb_api_trans_start_count_session | 7 | 
| Ndb_api_trans_commit_count_session | 6 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 7 | 
| Ndb_api_pk_op_count_session | 8 |
| Ndb_api_uk_op_count_session | 0 |
| Ndb_api_table_scan_count_session | 1 |
| Ndb_api_range_scan_count_session | 0 |
| Ndb_api_pruned_scan_count_session | 0 |
| Ndb_api_scan_batch_count_session | 0 |
| Ndb_api_read_row_count_session | 3 | 
| Ndb_api_trans_local_read_row_count_session | 2 |
+ -------------------------------------------- + ---- ------- +
18行(0.00秒)

我们可以从这些结果中进行一些观察:

21.6 NDB群集复制

NDB群集支持异步复制,通常简称为 复制本节介绍如何设置和管理配置,其中作为NDB群集运行的一组计算机复制到另一台计算机或一组计算机。正如本手册其他章节所讨论的,我们假设读者有熟悉标准MySQL复制的部分。(请参阅第16章,复制)。

注意

NDB群集不支持使用GTID进行复制; NDB存储引擎也不支持半同步复制

正常(非群集)复制涉及 服务器和服务器,主服务器是要复制的操作和数据的来源,服务器是这些服务器的接收者。在NDB集群中,复制在概念上非常相似,但在实践中可能更复杂,因为它可能会扩展到覆盖许多不同的配置,包括在两个完整集群之间进行复制。虽然NDB集群本身依赖于NDB 用于集群功能存储引擎,但不必将其NDB用作副本表副本的副本的存储引擎(请参阅 从NDB到其他存储引擎的复制)。但是,为了获得最大可用性,可以(也是最好)从一个NDB集群复制到另一个NDB集群,我们正在讨论这种情况,如下图所示:

图21.28 NDB群集到群集复制布局

Much of the content is described in the surrounding text. It visualizes how a master MySQL server is replicated as a slave. The slave differs in that it shows an I/O thread pointing to a Relay Binlog, and that Relay Binlog pointing to an SQL thread. In addition, while the binlog points to and from the NdbCluster Engine on the master, on the slave diagram it points directly to the slave's MySQL server.

在这种情况下,复制过程是将主集群的连续状态记录并保存到从集群的过程。这个过程由一个称为NDB二进制日志注入器线程的特殊线程完成,该线程在每个MySQL服务器上运行并产生一个二进制日志(binlog)。此线程可确保生成二进制日志的群集中的所有更改(而不仅仅是通过MySQL服务器实现的更改)都以正确的序列化顺序插入到二进制日志中。我们将MySQL复制主服务器和复制从服务器称为复制服务器或复制节点,将它们之间的数据流或通信线称为 复制通道

有关使用NDB群集和NDB群集复制执行时间点恢复的信息,请参见 第21.6.9.2节“使用NDB群集复制的时间点恢复”

NDB API _slave状态变量。  NDB API计数器可以在NDB群集复制从服务器上提供增强的监视功能。这些被实现为NDB统计_slave地位的变量,如在输出看到的SHOW STATUS,或对查询结果 SESSION_STATUSGLOBAL_STATUS 表中的MySQL连接到正在作为NDB群集复制一个从MySQL服务器的客户端会话。通过比较执行影响复制的语句之前和之后这些状态变量的值 NDB表中,您可以观察从站在NDB API级别上采取的相应操作,这在监视或排除NDB群集复制故障时非常有用。第21.5.16节“NDB API统计计数器和变量”提供了附加信息。

从NDB复制到非NDB表。  可以将NDB 充当主服务器的NDB集群中的表复制到使用其他MySQL存储引擎(例如 InnoDBMyISAM在从属 mysqld)上的表中这受到许多条件的限制; 有关更多信息,请参阅 从NDB到其他存储引擎的复制以及 从NDB到非事务性存储引擎的复制

21.6.1 NDB群集复制:缩写和符号

在本节中,我们使用以下缩写或符号来指代主群集和从群集,以及在群集或群集节点上运行的进程和命令:

表21.398在本节中使用的缩写表示主节点和从节点集群,以及在节点上运行的进程和命令

符号或缩写 说明(指...)
M 作为(主)复制主节点的集群
S 作为(主)复制从服务器的集群
shellM> 在主集群上发出Shell命令
mysqlM> MySQL客户端命令在作为主集群上的SQL节点运行的单个MySQL服务器上发出
mysqlM*> MySQL客户端命令将在参与复制主集群的所有SQL节点上发出
shellS> Shell命令将在从集群上发出
mysqlS> MySQL客户端命令在作为从集群上的SQL节点运行的单个MySQL服务器上发出
mysqlS*> MySQL客户端命令将在参与复制从集群的所有SQL节点上发出
C 主复制通道
C' 次要复制渠道
M' 辅助复制主
S' 次要复制从属

21.6.2 NDB群集复制的一般要求

复制通道需要两台充当复制服务器的MySQL服务器(主服务器和从服务器各一台)。例如,这意味着对于具有两个复制通道的复制设置(以提供冗余通道),总共将有四个复制节点,每个群集两个。

本节中描述的NDB群集的复制及其后面的复制依赖于基于行的复制。这意味着复制主MySQL服务器必须使用--binlog-format=ROW运行 --binlog-format=MIXED,如第21.6.6节“启动NDB群集复制(单一复制通道)”中所述有关基于行的复制的一般信息,请参见 第16.2.1节“复制格式”

重要

如果尝试使用NDB群集复制 --binlog-format=STATEMENT,复制将无法正常工作,因为 ndb_binlog_index主服务器epoch上的ndb_apply_status表和从服务器上的表未更新(​​请参见 第21.6.4节“NDB群集复制架构和表”)。相反,只有充当复制主服务器的MySQL服务器上的更新才会传播到从服务器,并且不会复制主集群上任何其他SQL节点的更新。

--binlog-formatNDB 7.5中选项的默认值 MIXED

用于在任一群集中进行复制的每个MySQL服务器必须在参与任一群集的所有MySQL复制服务器中唯一标识(您不能在主群集和从群集上的复制服务器共享相同的ID)。这可以通过使用选项来启动每个SQL节点来完成 ,其中是一个唯一的整数。虽然这不是严格必要的,但为了讨论的目的,我们将假定所有NDB Cluster二进制文件都具有相同的发行版本。 --server-id=idid

在MySQL复制中,通常情况下,所涉及的两个MySQL服务器(mysqld进程)必须相互兼容,既涉及所使用的复制协议的版本,也涉及它们支持的SQL功能集(请参见第16.4.2节“复制MySQL版本之间的兼容性“)。这是由于NDB集群和MySQL Server 5.7分发版中的二进制文件之间存在这种差异,因此NDB集群复制具有额外的要求,即这两个 mysqld二进制文件都来自NDB集群分发版。确保mysqld最简单最简单的方法 服务器兼容的是对所有主和从mysqld二进制文件使用相同的NDB集群分发

我们假定从服务器或集群专用于复制主服务器,并且没有其他数据存储在其上。

所有NDB正在复制的表必须使用MySQL服务器和客户端来创建。使用NDB API(例如,Dictionary::createTable()创建的表和其他数据库对象 对MySQL服务器不可见,因此不会被复制。可以复制NDB API应用程序对使用MySQL服务器创建的现有表的更新。

注意

可以使用基于语句的复制来复制NDB群集。但是,在这种情况下,下列限制适用:

  • 作为主服务器的集群上的所有数据行更新必须定向到单个MySQL服务器。

  • 使用多个同时的MySQL复制进程复制群集是不可能的。

  • 只有在SQL级别所做的更改才会被复制。

除了基于行为复制的基于语句的复制的其他限制之外,这些还有一些限制。有关这两种复制格式之间差异的更多具体信息,请参见第16.2.1.1节“基于声明和基于行的复制的优缺点”

21.6.3 NDB群集复制中的已知问题

本节讨论与NDB Cluster 7.5一起使用复制时的已知问题或问题。

主从连接丢失。  复制主节点SQL节点和复制从节点SQL节点之间或复制主节点SQL节点和主节点集群中的数据节点之间可能发生连接中断。在后一种情况下,这不仅可能由于物理连接丢失(例如网线断开)而导致,而且可能由于数据节点事件缓冲区的溢出而发生; 如果SQL节点响应速度太慢,它可能会被群集丢弃(这可以通过调整MaxBufferedEpochsTimeBetweenEpochs 配置参数在某种程度上进行控制 )。如果发生这种情况,则完全可以将新数据插入到主群集中而不记录在复制主服务器的二进制日志中因此,为保证高可用性,维护备份复制通道,监视主通道以及在必要时故障切换到辅助复制通道以保持从属集群与主集群同步是非常重要的。NDB集群的设计目的并不在于自己进行这种监测; 为此,需要外部应用程序。

连接或重新连接到主群集时 ,复制主服务器会发出间隙事件。(间隙事件是一种事件事件,它表示发生的事件会影响数据库的内容,但不容易表示为一组更改。事件的例子是服务器崩溃,数据库重新同步,(某些)软件更新和(某些)硬件更改)。当从站在复制日志中遇到间隙时,它会停止并显示错误消息。该消息在输出中可用 SHOW SLAVE STATUS,并且表示由于注册在复制流中的事件而导致SQL线程停止,并且需要手动干预。请参见第21.6.8节“使用NDB群集复制实现故障转移”,了解有关此类情况下要执行的操作的更多信息。

重要

由于NDB群集并非设计用于监视复制状态或提供故障转移,因此如果从属服务器或群集需要高可用性,则必须设置多个复制行,监视主复制行上的mysqld,以及如有必要,准备故障转移到辅助线路。这必须手动完成,或者可能通过第三方应用程序完成。有关实现此类设置的信息,请参见 第21.6.7节“为NDB群集复制使用两个复制通道”第21.6.8节“使用NDB群集复制实现故障转移”

但是,如果您要从独立的MySQL服务器复制到NDB群集,则一个通道通常就足够了。

循环复制。  NDB群集复制支持循环复制,如下一个示例所示。复制设置涉及三个编号为1,2和3的NDB群集,其中群集1充当群集2的复制主控,群集2充当群集3的主控,群组3充当群集1的主控,因此完成这个圈子。每个NDB群集有两个SQL节点,其中属于群集1的SQL节点A和B,属于群集2的SQL节点C和D以及属于群集3的SQL节点E和F.

只要满足以下条件,就支持使用这些群集的循环复制:

  • 所有主站和从站上的SQL节点都是相同的

  • 充当复制主节点和从节点的所有SQL节点都使用该--log-slave-updates选项 启动

下图显示了这种类型的循环复制设置:

图21.29将所有主设备作为从设备的NDB群集循环复制

Content is described in the surrounding text.

在这种情况下,群集1中的SQL节点A将复制到群集2中的SQL节点C; SQL节点C复制到群集3中的SQL节点E; SQL节点E复制到SQL节点A.换句话说,复制行(由图中的红色箭头表示)直接连接用作复制主节点和从节点的所有SQL节点。

还应该可以设置循环复制,其中并非所有主SQL节点都是从属节点,如下所示:

图21.30不是所有主机都是从机的NDB群集循环复制

Some content is described in the surrounding text. It shows three clusters, each with two nodes. Arrows connect nodes from different clusters to represent that now all masters are slaves.

在这种情况下,每个集群中的不同SQL节点都将用作复制主节点和从节点。但是,您 不得使用任何SQL节点启动 --log-slave-updatesNDB Cluster的这种类型的循环复制方案应该是可能的,其中复制线(在图中用红色箭头表示)是不连续的,但应该指出,它尚未经过彻底测试,因此必须仍被认为是实验性的。

注意

NDB存储引擎使用 幂等执行模式,这抑制重复键和以其他方式分解NDB簇的圆形复制其他错误。这相当于将全局slave_exec_mode系统变量设置 IDEMPOTENT,但在NDB群集复制中这不是必需的,因为NDB群集会自动设置此变量并忽略任何显式设置它的尝试。

NDB群集复制和主键。  在节点发生故障的NDB情况下,由于在这种情况下可能会插入重复的行,因此仍可能发生无主键表的复制错误 出于这个原因,强烈建议所有NDB正在复制的表都有主键。

NDB群集复制和唯一密钥。  在早期版本的NDB群集中,更新NDB的唯一键列值的操作在复制时可能会导致重复键错误。NDB通过推迟唯一的键检查,直到执行完所有表行更新之后,才解决间复制问题

以这种方式推迟约束目前仅支持 NDB因此,当复制NDB到不同的存储引擎(例如 MyISAMInnoDB仍然不被支持)时,唯一密钥的更新

复制时没有延迟检查唯一密钥更新时遇到的问题可以使用NDB表格进行说明, 例如 t,在主服务器上创建并填充(并复制到不支持延迟唯一密钥更新的从服务器),如下所示:

CREATE TABLE t(
    p INT主键,
    c INT,
    唯一密钥u(c)
)ENGINE NDB;

插入到t
    VALUES(1,1),(2,2),(3,3),(4,4),(5,5);

以下UPDATE语句在tmaster 成功执行,因为受影响的行按照ORDER BY选项确定的顺序处理 ,并在整个表上执行:

UPDATE t SET c = c  -  1 ORDER BY p;

但是,相同的语句失败,从属关键字错误或其他约束冲突失败,因为行更新的排序是一次为一个分区完成的,而不是整个表。

注意

NDB创建时, 每个表都由键隐式分区。有关更多信息请参见 第22.2.5节“KEY分区”

GTID不受支持。  使用全局事务标识的复制与NDB存储引擎不兼容,并且不受支持。启用GTID可能会导致NDB群集复制失败。

多线程从站不受支持。  NDB簇不支持多线程的奴隶,并设置相关的系统变量,例如 slave_parallel_workersslave_checkpoint_groupslave_checkpoint_group(或等值的mysqld启动选项)没有任何影响。

这是因为从属服务器可能无法将一个数据库中发生的事务与另一个数据库中发生的事务分开(如果它们是在同一个时间段内写入的话)。另外,由于需要更新表(参见 第21.6.4节“NDB群集复制模式和表”NDB存储引擎处理的每个事务至少涉及两个数据库 - 目标数据库和 mysql系统数据库 这反过来又打破了事务对特定数据库特定的多线程的要求。 mysql.ndb_apply_status

用--initial重新启动。  使用该--initial选项重新启动群集 会导致GCI和时期编号的序列从中重新开始 0(这通常适用于NDB群集,不限于涉及群集的复制场景。)涉及复制的MySQL服务器应在此情况下重新启动。在此之后,您应该分别使用 RESET MASTERRESET SLAVE语句来清除无效ndb_binlog_indexndb_apply_status表。

从NDB复制到其他存储引擎。 NDB 考虑到此处列出的限制,可以使用从站上的不同存储引擎将主站上的表 复制到表上:

  • 不支持多主机和循环复制(主机和从机上的表必须使用 NDB存储引擎才能工作)。

  • 使用不从属表执行二进制日志记录的存储引擎需要特殊处理。

  • 从属表使用非事务性存储引擎也需要特殊处理。

  • mysqld必须以--ndb-log-update-as-write=0开头 --ndb-log-update-as-write=OFF

接下来的几段提供了关于上述每个问题的附加信息。

将NDB复制到其他存储引擎时不支持多个主服务器。  为了复制NDB到不同的存储引擎,两个数据库之间的关系必须是简单的主从关系。这意味着NDB集群和其他存储引擎之间不支持循环或主 - 主复制。

另外,在NDB不同存储引擎之间进行复制时,不可能配置多个复制通道 (但是,NDB集群数据库可以 同时复制到多个从属NDB集群数据库。)如果主服务器使用NDB表,则仍有可能让多个MySQL服务器维护所有更改的二进制日志; 但是,对于从设备更改主设备(故障切换),必须在从设备上明确定义新的主从关系。

将NDB复制到不执行二进制日志记录的从属存储引擎。  如果您尝试从NDB群集复制到使用不处理自己的二进制日志记录的存储引擎的从站,则复制过程中止,并且错误 二进制日志记录不可能......语句不能自动写入,因为多个引擎涉及和至少一个引擎是自我记录(错误 1595)。可以通过以下方式之一解决此问题:

  • 关闭从站上的二进制日志记录。  这可以通过设置来完成 sql_log_bin = 0

  • 更改用于mysql.ndb_apply_status表的存储引擎。  导致该表使用不处理其自己的二进制日志记录的引擎也可以消除冲突。这可以通过ALTER TABLE mysql.ndb_apply_status ENGINE=MyISAM在从站上发布语句来完成 NDB在从服务器上使用非存储引擎时这样做是安全的,因为您不需要担心保持多个从服务器SQL节点的同步。

  • 过滤掉对从机上的mysql.ndb_apply_status表的更改。  这可以通过启动从属SQL节点来完成 --replicate-ignore-table=mysql.ndb_apply_status如果需要通过复制忽略其他表,则可以改为使用适当的 --replicate-wild-ignore-table 选项。

重要

你应该禁止复制或二进制日志mysql.ndb_apply_status或更改复制从一个NDB簇到另一个时使用此表的存储引擎。有关详细信息,请参阅 NDB群集之间的复制和二进制日志过滤规则

从NDB复制到非事务性存储引擎。  从复制NDB到诸如非事务性存储引擎 MyISAM时,复制INSERT ... ON DUPLICATE KEY UPDATE语句时可能会遇到不必要的重复键错误 你可以通过使用这些来--ndb-log-update-as-write=0强制这些 更新被强制记录为写入(而不是更新)。

NDB群集之间的复制和二进制日志过滤规则。  如果你正在使用任何选项 --replicate-do-*--replicate-ignore-*--binlog-do-db,或 --binlog-ignore-db过滤被复制数据库或表,必须注意不要挡住或复制的二进制日志 mysql.ndb_apply_status,这是需要NDB集群之间的复制正常工作。尤其要注意以下几点:

  1. 使用 (而不是其他选项)意味着 只有数据库中的被复制。在这种情况下,你也应该使用 以保证填充的奴隶。 --replicate-do-db=db_name--replicate-do-*--replicate-ignore-*db_name--replicate-do-db=mysql--binlog-do-db=mysql--replicate-do-table=mysql.ndb_apply_statusmysql.ndb_apply_status

    使用 (并且没有其他 选项)意味着仅对数据库中的表进行更改将写入二进制日志。在这种情况下,你也应该使用 以保证填充的奴隶。 --binlog-do-db=db_name--binlog-do-dbdb_name--replicate-do-db=mysql--binlog-do-db=mysql--replicate-do-table=mysql.ndb_apply_statusmysql.ndb_apply_status

  2. 使用 --replicate-ignore-db=mysql 意味着mysql数据库中没有表被复制。在这种情况下,您还应该使用 --replicate-do-table=mysql.ndb_apply_status 以确保mysql.ndb_apply_status复制。

    使用--binlog-ignore-db=mysql 意味着mysql数据库中的表没有更改 写入二进制日志。在这种情况下,您还应该使用 --replicate-do-table=mysql.ndb_apply_status 以确保mysql.ndb_apply_status复制。

您还应该记住,每个复制规则都需要以下内容:

  1. 它自己--replicate-do-*--replicate-ignore-*选项,并且多个规则不能用单个复制筛选选项表示。有关这些规则的信息,请参见 第16.1.6节“复制和二进制日志记录选项和变量”

  2. 它自己--binlog-do-db--binlog-ignore-db选项,并且多个规则不能用单个二进制日志过滤选项表示。有关这些规则的信息,请参见 第5.4.4节“二进制日志”

如果您正在将NDB群集复制到使用非存储引擎的从站,则NDB本节其他地方讨论过,前面所述的考虑可能不适用。

NDB群集复制和IPv6。  目前,NDB API和MGM API不支持IPv6。但是,MySQL服务器(包括那些充当NDB群集中的SQL节点的服务器)可以使用IPv6来联系其他MySQL服务器。这意味着您可以使用IPv6在NDB群集之间进行复制以连接主节点和从节点SQL节点,如下图中的虚线箭头所示:

图21.31使用IPv6连接的SQL节点之间的复制

Most content is described in the surrounding text. The dotted line representing a MySQL-to-MySQL IPv6 connection is between two nodes, one each from master and slave clusters. All connections within the cluster, such as ndbd-to-ndbd, node to ndb_mgmd, are connected with solid lines to indicate IPv4 connections only.

但是, 在上图中用实箭头表示的NDB群集所有连接必须使用IPv4。换句话说,所有NDB群集数据节点,管理服务器和管理客户端必须能够使用IPv4相互访问。另外,SQL节点必须使用IPv4与集群进行通信。

由于NDB和MGM API目前不支持IPv6,所以使用这些API编写的任何应用程序也必须使用IPv4进行所有连接。

属性升级和降级。  NDB群集复制包括对属性升级和降级的支持。后者的实现区分了有损和无损类型转换,并且可以通过设置slave_type_conversions全局服务器系统变量来控制它们在从属设备上的使用

有关NDB群集中的属性升级和降级的更多信息,请参阅 基于行的复制:属性升级和降级

NDB不同于InnoDB 或者MyISAM,不会将对虚拟列的更改写入二进制日志; 但是,这对NDB群集复制或NDB其他存储引擎之间的复制没有不利影响记录对存储的生成列的更改。

21.6.4 NDB群集复制架构和表

NDB集群中的复制使用mysql每个MySQL服务器实例上数据库中的大量专用表,充当正在复制的集群和复制从属设备(无论从属服务器是单个服务器还是集群)中的SQL节点。这些表是在MySQL安装过程中由 mysql_install_db脚本创建的,并且包含一个用于存储二进制日志索引数据的表。由于该 ndb_binlog_index表对于每个MySQL服务器都是本地的,并且不参与集群,因此它使用 InnoDB存储引擎。这意味着它必须在每个mysqld上分别创建 参与主集群。(但是,二进制日志本身包含要复制的群集中所有MySQL服务器的更新。)此表的定义如下:

CREATE TABLE`ndb_binlog_index`(
    `位置`BIGINT(20)UNSIGNED NOT NULL,
    `File` VARCHAR(255)NOT NULL,
    `epoch` BIGINT(20)UNSIGNED NOT NULL,
    `inserts` INT(10)UNSIGNED NOT NULL,
    `updates` INT(10)UNSIGNED NOT NULL,
    `删除'INT(10)UNSIGNED NOT NULL,
    `schemaops` INT(10)UNSIGNED NOT NULL,
    `orig_server_id` INT(10)UNSIGNED NOT NULL,
    `orig_epoch` BIGINT(20)UNSIGNED NOT NULL,
    `gci` INT(10)UNSIGNED NOT NULL,
    `next_position` bigint(20)unsigned NOT NULL,
    `next_file` varchar(255)NOT NULL,
    PRIMARY KEY(`epoch`,`orig_server_id`,`orig_epoch`)
)ENGINE = InnoDB DEFAULT CHARSET = latin1;
注意

在NDB 7.5.2之前,该表总是使用 MyISAM存储引擎。如果您要从早期版本进行升级,则可以使用 mysql_upgrade--forceand --upgrade-system-tables 选项来使其ALTER TABLE ... ENGINE=INNODB在此表上执行 语句。MyISAM为了向后兼容,NDB 7.5.2和更高版本继续支持在此表中使用 存储引擎。

ndb_binlog_index转换后可能需要额外的磁盘空间InnoDB如果这成为一个问题,您可以通过使用该InnoDB表的表空间,更改ROW_FORMATCOMPRESSED或两者来节省空间有关更多信息,请参见第13.1.19节“CREATE TABLESPACE语法”第13.1.18节“CREATE TABLE语法”以及 第14.7节“InnoDB表空间”

该表的大小取决于每个二进制日志文件的时期数和二进制日志文件的数量。每个二进制日志文件的时期数通常取决于每个时期生成的二进制日志的数量和二进制日志文件的大小,较小的时期导致每个文件的时期更多。您应该意识到ndb_binlog_index,即使--ndb-log-empty-epochs选项为 空,时空纪元也会在表中 插入数据 OFF,这意味着每个文件的条目数取决于文件正在使用的时间长度; 那是,

[每个文件的时代数] = [每个文件花费的时间] / TimeBetweenEpochs

一个繁忙的NDB集群定期写入二进制日志,并且可能会比安静的日志文件更快地旋转二进制日志文件。这意味着一个安静的 NDB集群 --ndb-log-empty-epochs=ON实际上ndb_binlog_index每个文件行数比拥有大量活动得多。

使用该选项启动 mysqld时--ndb-log-orig,the orig_server_idorig_epochcolumns分别存储事件发起的服务器的ID和源服务器上事件发生的时期,这在NDB使用多主设备的集群复制设置中非常有用。SELECT语句用于在多主站设置中查找最接近的二进制日志位置到从站上的最高应用时期(请参见 第21.6.10节“NDB群集复制:多主复制和循环复制”)使用这两列,这些列没有编入索引。尝试故障转移时,这可能会导致性能问题,因为查询必须执行表扫描,特别是在主服务器正在运行时--ndb-log-empty-epochs=ON您可以通过向这些列添加索引来改进多主站故障转移时间,如下所示:

ALTER TABLE mysql.ndb_binlog_index
    ADD INDEX orig_lookup USING BTREE(orig_server_id,orig_epoch);

添加此索引时从单个主站复制到单个从站时没有任何好处,因为在这种情况下用于获取二进制日志位置的查询不使用 orig_server_idorig_epoch

有关使用列的更多信息 请参见第21.6.8节“使用NDB群集复制实现故障转移”next_positionnext_file

下图显示了NDB群集复制主服务器,其二进制日志注入器线程和 mysql.ndb_binlog_index表之间的关系。

图21.32复制主集群

Most concepts are described in the surrounding text. This complex image has three main areas. The top area is divided into three sections: MySQL Server (mysqld), NdbCluster table handler, and mutex. A connection thread connects these three areas, and receiver and injector threads connect NdbCluster table handler and mutex. The bottom area lists four data nodes (ndbd). They all have events arrows pointing to the receiver thread, and the receiver thread also points to the connection and injector threads. One node sends and receives to the mutex area. The injector thread points to a binlog and also the third area in this image: the ndb_binlog_index table, a table described in the surrounding text.

另外一个名为named的表格ndb_apply_status用于记录从主站复制到从站的操作记录。与大小写不同 ndb_binlog_index,此表中的数据并非特定于(从)集群中的任何一个SQL节点,因此 ndb_apply_status可以使用 NDBCLUSTER存储引擎,如下所示:

CREATE TABLE`ndb_apply_status`(
    `server_id` INT(10)UNSIGNED NOT NULL,
    `epoch` BIGINT(20)UNSIGNED NOT NULL,
    `log_name` VARCHAR(255)字符集latin1 COLLATE latin1_bin NOT NULL,
    `start_pos` BIGINT(20)UNSIGNED NOT NULL,
    `end_pos` BIGINT(20)UNSIGNED NOT NULL,
    PRIMARY KEY(`server_id`)使用HASH
)ENGINE = NDBCLUSTER DEFAULT CHARSET = latin1;

ndb_apply_status表只填充在从属设备上,这意味着,在主设备上,该表从不包含任何行; 因此,没有必要允许 DataMemory或被 IndexMemory分配到ndb_apply_status那里。

由于该表是从源自主机的数据填充的,因此应该允许其复制; 任何复制过滤或二进制日志过滤规则会无意中阻止从属设备更新,ndb_apply_status或者主设备无法写入二进制日志可能会阻止集群之间的复制无法正常运行。有关此类过滤规则产生的潜在问题的更多信息,请参阅 复制和二进制日志过滤规则以及NDB群集之间的复制

这些ndb_binlog_indexndb_apply_status表在mysql数据库中创建, 因为它们不应该被用户显式复制。用户干预通常不需要创建或维持任一这些表的,因为这两个ndb_binlog_indexndb_apply_status由保持 NDB二进制日志(二进制日志)喷射器线程。这使主mysqld进程更新为由NDB存储引擎执行的更改 二进制日志注入线程直接从接收事件 的存储引擎。NDB NDBNDB注入器负责捕获集群内的所有数据事件,并确保所有更改,插入或删除数据的事件都记录在ndb_binlog_index表中。从站I / O线程将事件从主站的二进制日志传送到从站的中继日志。

但是,建议检查这些表的存在和完整性,作为准备用于复制的NDB群集的初始步骤。通过mysql.ndb_binlog_index直接在主设备上查询表格,可以查看记录在二进制日志中的事件数据 这也可以使用SHOW BINLOG EVENTS复制主服务器或从属MySQL服务器上语句来完成 (请参见 第13.7.5.2节“SHOW BINLOG EVENTS语法”。)

您也可以从输出中获取有用的信息 SHOW ENGINE NDB STATUS

ndb_schema表用于跟踪对NDB表进行的模式更改它的定义如下所示:

CREATE TABLE ndb_schema(
    `db` VARBINARY(63)NOT NULL,
    `name` VARBINARY(63)NOT NULL,
    `slock` BINARY(32)NOT NULL,
    `query` BLOB NOT NULL,
    `node_id` INT UNSIGNED NOT NULL,
    `epoch` BIGINT UNSIGNED NOT NULL,
    `id` INT UNSIGNED NOT NULL,
    `version` INT UNSIGNED NOT NULL,
    `type` INT UNSIGNED NOT NULL,
    主键使用哈希(db,name)
)ENGINE = NDB DEFAULT CHARSET = latin1;

与本节前面提到的两个表不同 ndb_schema,MySQL对于MySQL SHOW语句或任何 INFORMATION_SCHEMA都不可见 ; 然而,它可以在ndb_show_tables的输出中看到,如下所示:

外壳> ndb_show_tables -t 2
id类型状态记录数据库模式名称
4 UserTable Online是mysql def ndb_apply_status
5 UserTable Online是ndbworld def city
6 UserTable在线是ndbworld def country
3 UserTable Online是mysql def NDB $ BLOB_2_3
7 UserTable在线是ndbworld def countrylanguage
2 UserTable在线是mysql def ndb_schema

NDBT_ProgramExit:0  - 确定

也可以SELECTmysql和其他MySQL客户端应用程序的这个表中获取,如下所示:

MySQL的> SELECT * FROM mysql.ndb_schema WHERE name='city' \G
*************************** 1. row ******************** *******
     db:ndbworld
   名称:城市
  SLOCK:
  查询:alter table城市引擎= ndb
node_id:4
  时代:0
     ID:0
版本:0
   键入:7
一排(0.00秒)

这在调试应用程序时有时会很有用。

注意

在对NDB执行模式更改时 ,应用程序应该等到ALTER TABLE 在尝试使用表的更新定义之前,在发出语句的MySQL客户端连接中返回语句。

如果该ndb_apply_status表或 ndb_schema表不存在于从属设备上,则 ndb_restore会重新创建缺少的表(Bug#14612)。

NDB群集复制的冲突解决方案需要附加mysql.ndb_replication 表格。目前,该表格必须手动创建。有关如何执行此操作的信息,请参见 第21.6.11节“NDB群集复制冲突解决方案”

21.6.5准备用于复制的NDB群集

准备用于复制的NDB群集包含以下步骤:

  1. 检查所有MySQL服务器的版本兼容性(请参见 第21.6.2节“NDB群集复制的一般要求”)。

  2. 在主群集上创建具有适当权限的从属帐户:

    mysql M> GRANT REPLICATION SLAVE
         - > 
         - >ON *.* TO 'slave_user'@'slave_host'IDENTIFIED BY 'slave_password';
    

    在前面的语句中, slave_user是从属帐户用户名,slave_host是复制从属的主机名或IP地址,并且 slave_password是分配给此帐户的密码。

    例如,要创建一个具有名称的从属用户帐户,请 myslave从命名主机登录 rep-slave并使用密码 53cr37,请使用以下 GRANT语句:

    mysql M> GRANT REPLICATION SLAVE
         - > ON *.* TO 'myslave'@'rep-slave'
         - >IDENTIFIED BY '53cr37';
    

    出于安全原因,最好将唯一用户帐户(不用于任何其他目的)用于复制从属帐户。

  3. 配置从站以使用主站。使用MySQL Monitor,可以通过以下CHANGE MASTER TO语句完成

    mysql S> CHANGE MASTER TO
         - > 
         - > 
         - > 
         - >MASTER_HOST='master_host',MASTER_PORT=master_port,MASTER_USER='slave_user',MASTER_PASSWORD='slave_password';
    

    在前面的说明中,master_host是复制主机的主机名或IP地址,master_port是从机用于连接到主机的端口 是在主机 slave_user上为从机设置的用户名, slave_password是为该用户帐户在上一步中。

    例如,要rep-master通过使用在上一步中创建的复制从属帐户从主机名为MySQL的服务器复制从服务器,请使用以下语句:

    mysql S> CHANGE MASTER TO
         - > MASTER_HOST='rep-master',
         - > MASTER_PORT=3306,
         - > MASTER_USER='myslave',
         - >MASTER_PASSWORD='53cr37';
    

    有关此语句可使用的选项的完整列表,请参见第13.4.2.1节“将主语句更改”

    要提供复制备份功能,您还需要在启动复制过程之前向--ndb-connectstring从属my.cnf文件添加一个选项有关详细信息,请参见 第21.6.9节“NDB群集备份与NDB群集复制”

    有关my.cnf复制从服务器可以设置的其他选项 ,请参见 第16.1.6节“复制和二进制日志记录选项和变量”

  4. 如果主群集已在使用中,则可以创建主服务器的备份并将其加载到从服务器上,以减少从服务器与主服务器进行同步所需的时间。如果从站也在运行NDB群集,可以使用第21.6.9节“使用NDB群集复制的NDB群集备份”中所述的备份和还原过程来完成此操作

    ndb-connectingtring = management_host[:port]
    

    如果您在复制从服务器上使用NDB群集,则可以在复制主服务器上使用此命令创建备份:

    shell M>mysqldump --master-data=1
    

    然后通过将转储文件复制到从属设备,将生成的数据转储导入到从设备。在此之后,您可以使用 mysql客户端将转储文件中的数据导入到从属数据库中,如下所示,其中 dump_file是使用主服务器上的mysqldump生成的文件db_name的名称,并且是要复制的数据库的名称:

    shell S>mysql -u root -p db_name < dump_file
    

    有关使用mysqldump的完整选项列表 ,请参阅第4.5.4节“ mysqldump - 数据库备份程序”

    注意

    如果以这种方式将数据复制到从属设备,则应确保从属设备已启动 --skip-slave-start在命令行上选项,否则包含 skip-slave-start在从机 my.cnf文件中以防止从机连接到主机以开始复制所有的数据已被加载。一旦数据加载完成,请按照下面两节中概述的其他步骤操作。

  5. 确保作为复制主服务器的每个MySQL服务器都配置了唯一的服务器标识,并且启用了二进制日志记录,并使用行格式。(请参见 第16.2.1节“复制格式”。)这些选项可以在主服务器的my.cnf 文件中设置,也可以在启动主mysqld进程时在命令行 中设置。有关后一选项的信息,请参见 第21.6.6节“启动NDB群集复制(单一复制通道)”

21.6.6启动NDB群集复制(单个复制通道)

本节概述使用单个复制通道启动NDB群集复制的过程。

  1. 通过发出以下命令启动MySQL复制主服务器:

    shell M>mysqld --ndbcluster --server-id=id \
            --log-bin &
    

    在前面的语句中,id是该服务器的唯一ID(请参见 第21.6.2节“NDB群集复制的一般要求”)。这将启动服务器的mysqld进程,并使用正确的日志记录格式启用二进制日志记录。

    注意

    您也可以启动主服务器 --binlog-format=MIXED,在这种情况下,在群集之间进行复制时,会自动使用基于行的复制。STATEMENT NDB群集复制不支持基于Web的二进制日志记录(请参见 第21.6.2节“NDB群集复制的一般要求”)。

  2. 如下所示启动MySQL复制从服务器:

    shell S>mysqld --ndbcluster --server-id=id &
    

    在刚刚显示的命令中,id是从服务器的唯一ID。不需要在复制从站上启用日志记录。

    注意

    您应该使用--skip-slave-start此命令选项,否则您应该包含 skip-slave-start在从属服务器的 my.cnf文件中,除非您希望立即开始复制。使用此选项时,复制的开始会延迟到START SLAVE 发出适当的语句,如下面的步骤4所述。

  3. 有必要将从服务器与主服务器的复制二进制日志同步。如果二进制日志记录先前未在主服务器上运行,请在从服务器上运行以下语句:

    mysql S> CHANGE MASTER TO
         - > MASTER_LOG_FILE='',
         - >MASTER_LOG_POS=4;
    

    这指示从设备从日志的起点开始读取主设备的二进制日志。否则,也就是说,如果要使用备份从主服务器加载数据,请参见 第21.6.8节“使用NDB群集复制实现故障转移”,了解有关如何获取用于MASTER_LOG_FILEMASTER_LOG_POS在这种情况下的正确值的信息

  4. 最后,您必须通过从复制从服务器上的mysql客户端发出以下命令来指示从服务器开始应用复制

    mysql S>START SLAVE;
    

    这也启动了复制数据从主设备到从设备的传输。

也可以使用两个复制通道,其方式与下一节中介绍的过程类似; 第21.6.7节“使用两个复制通道进行NDB群集复制”介绍了这一点与使用单个复制通道的区别

还可以通过启用批量更新来提高群集复制性能这可以通过slave_allow_batching在从属mysqld进程设置系统变量来完成 通常情况下,只要收到更新即可应用更新。但是,使用批处理会导致更新以32 KB的批次应用,这可能会导致更高的吞吐量和更少的CPU使用率,尤其是在单个更新较小的情况下。

注意

奴隶批量在每个时代的基础上工作; 属于多个事务的更新可作为同一批次的一部分发送。

所有未完成的更新在达到时期结束时应用,即使更新总计小于32 KB。

批处理可以在运行时打开和关闭。要在运行时激活它,您可以使用以下两种语句之一:

SET GLOBAL slave_allow_batching = 1;
SET GLOBAL slave_allow_batching = ON;

如果某个特定批次导致问题(例如其效果看起来没有被正确复制的语句),则可以使用以下任一语句停用从站批处理:

SET GLOBAL slave_allow_batching = 0;
SET GLOBAL slave_allow_batching = OFF;

您可以通过适当的SHOW VARIABLES语句来检查是否正在使用从属批处理,如下所示:

MySQL的> SHOW VARIABLES LIKE 'slave%';
+ --------------------------- + ------- +
| 变量名| 值|
+ --------------------------- + ------- +
| slave_allow_batching | ON |
| slave_compressed_protocol | OFF |
| slave_load_tmpdir | / tmp |
| slave_net_timeout | 3600 |
| slave_skip_errors | OFF |
| slave_transaction_retries | 10 |
+ --------------------------- + ------- +
设置6行(0.00秒)

21.6.7使用两个复制通道进行NDB群集复制

在更完整的示例场景中,我们设想两个复制通道提供冗余,从而防止单个复制通道可能出现故障。这需要总共四个复制服务器,两个主群集和两个从属群集的从属服务器。为了以下讨论的目的,我们假设唯一标识符如下所示进行分配:

表21.399文本中描述的NDB群集复制服务器

服务器ID 描述
1 主 - 主复制通道(M
2 主 - 辅助复制通道(M'
3 从属 - 主复制通道(S
4 从属 - 辅助复制通道(S'

使用两个通道设置复制与设置单个复制通道没有根本的不同。首先,必须启动主要和次要复制主服务器mysqld进程,然后启动主要和次要从属服务器的进程。然后复制过程可以通过START SLAVE在每个从站上发布语句来启动这里显示命令和它们需要发布的顺序:

  1. 启动主复制主机:

    shell M>mysqld --ndbcluster --server-id=1 \
                   --log-bin &
    
  2. 启动辅助复制主服务器:

    shell M'>mysqld --ndbcluster --server-id=2 \
                   --log-bin &
    
  3. 启动主复制从服务器:

    shell S>mysqld --ndbcluster --server-id=3 \
                   --skip-slave-start &
    
  4. 启动辅助复制从站:

    shell S'>mysqld --ndbcluster --server-id=4 \
                    --skip-slave-start &
    
  5. 最后,通过执行START SLAVE 主从站上的语句在主通道上启动复制,如下所示:

    mysql S>START SLAVE;
    
    警告

    此时只有主要频道才能启动。第21.6.8节“使用NDB群集复制实现故障转移”中所述,仅在主要复制通道出现故障的情况下启动次要复制通道 同时运行多个复制通道可能会导致在复制从服务器上创建不需要的重复记录。

如前所述,不需要在复制从服务器上启用二进制日志记录。

21.6.8使用NDB群集复制实现故障转移

如果主群集复制进程失败,则可以切换到辅助复制通道。以下过程描述了完成此操作所需的步骤。

  1. 获取最近的全球检查点(GCP)的时间。也就是说,您需要确定ndb_apply_status从集群表中最新的时期 ,可以使用以下查询找到它:

    mysql S'> SELECT @latest:=MAX(epoch)
          - >        FROM mysql.ndb_apply_status;
    

    在循环复制拓扑中,每台主机上都运行一个主节点和一个从节点,当您使用时 ndb_log_apply_status=1,NDB群集时期将写入从属二进制日志中。这意味着该ndb_apply_status表包含该主机上的从属设备的信息,以及其他主机的信息,该主机充当在该主机上运行的主设备的从属设备。

    在这种情况下,您需要确定此从站的最新时期,以排除此从站二进制日志中的任何其他从站的任何时期,这些时期未在用于设置此从站IGNORE_SERVER_IDSCHANGE MASTER TO语句选项中 列出 排除这种时期的原因是mysql.ndb_apply_status 表中的行中服务器ID IGNORE_SERVER_IDS与用于准备该从属主服务器的CHANGE MASTER TO语句一起使用列表中的匹配项 也被认为来自本地服务器,除了那些具有从服务器自己的服务器ID。您可以Replicate_Ignore_Server_Ids 从输出中检索此列表SHOW SLAVE STATUS我们假设你已经获得了这个列表,并将它替换为 ignore_server_ids这里显示的查询,就像查询的前一个版本一样,选择一个名为 @latest

    mysql S'> SELECT @latest:=MAX(epoch)
          - >         FROM mysql.ndb_apply_status
          - >        WHERE server_id NOT IN (ignore_server_ids);
    

    在某些情况下,使用要包含的服务器ID列表以及上述查询条件可能会更简单或更高效(或两者兼而有之) server_id IN server_id_listWHERE

  2. 使用从步骤1中显示的查询获得的信息,从ndb_binlog_index主集群上的表中获取相应的记录

    您可以使用以下查询从主ndb_binlog_index 表中获取所需的记录

    mysql M'> SELECT
          - >      @file:=SUBSTRING_INDEX(next_file, '/', -1),
          - >      @pos:=next_position
          - > FROM mysql.ndb_binlog_index
          - > WHERE epoch >= @latest
          - >ORDER BY epoch ASC LIMIT 1;
    

    这些是主复制通道失败后保存在主服务器上的记录。我们在此使用了一个用户变量@latest来表示在步骤1中获得的值。当然,一个mysqld实例不可能直接访问另一个服务器实例上设置的用户变量。必须手动或在应用程序代码中将这些值插入第二个查询。

    重要

    您必须确保 在执行之前启动 从属mysqld否则,复制可能会因重复的DDL错误而停止。 --slave-skip-errors=ddl_exist_errorsSTART SLAVE

  3. 现在可以通过在辅助从服务器上运行以下查询来同步辅助通道:

    mysql S'> CHANGE MASTER TO
          - >      MASTER_LOG_FILE='@file',
          - >     MASTER_LOG_POS=@pos;
    

    再次,我们已经采用用户变量(在这种情况下 @file@pos)来表示在步骤2中得到,并在步骤3中应用的值; 在实践中,这些值必须手动插入或使用可以访问所涉及的两台服务器的应用程序代码。

    注意

    @file是一个字符串值 '/var/log/mysql/replication-master-bin.00001',因此在SQL或应用程序代码中使用时必须加引号。然而,所代表的值@pos 必须不能被引用。虽然MySQL通常会尝试将字符串转换为数字,但这种情况是个例外。

  4. 您现在可以在辅助通道上启动复制,方法是在辅助从服务器mysqld上发出相应的命令

    mysql S'>START SLAVE;
    

一旦次要复制通道处于活动状态,您可以调查主要故障并进行修复。要做到这一点所需的确切行动取决于主要渠道失败的原因。

警告

仅当主复制通道失败时才会启动辅助复制通道。同时运行多个复制通道可能会导致在复制从服务器上创建不需要的重复记录。

如果故障被限制为单个服务器,但应(在理论上)可以从复制MS',或从 M'S; 但是,这尚未经过测试。

21.6.9使用NDB群集复制的NDB群集备份

本节讨论如何使用NDB群集复制进行备份和恢复。我们假设复制服务器已经配置为先前已经涵盖(请参见 第21.6.5节“准备NDB群集以进行复制”以及后面的章节)。完成这一步后,进行备份并从中恢复的过程如下所示:

  1. 有两种不同的备份方法可以启动。

    • 方法A.  此方法要求在启动复制过程之前,主服务器上先启用了群集备份过程。这可以通过包括在以下行来完成 [mysql_cluster]的部分 my.cnf file,其中 management_host是的IP地址或主机名 NDB进行主群集管理服务器,并且port 是管理服务器的端口号:

      ndb-connectingtring = management_host[:port]
      
      注意

      只有在未使用默认端口(1186)时才需要指定端口号。有关NDB集群中端口和端口分配的更多信息请参见 第21.2.4节“NDB集群的初始配置”

      在这种情况下,可以通过在复制主服务器上执行以下语句来启动备份:

      shell M>ndb_mgm -e "START BACKUP"
      
    • 方法B.  如果my.cnf文件没有指定在哪里查找管理主机,则可以通过将此信息NDB作为START BACKUP命令的一部分传递给管理客户端来启动备份过程 这可以按照此处所示的方式完成,其中management_host 以及port是管理服务器的主机名和端口号:

      shell M>ndb_mgm management_host:port -e "START BACKUP"
      

      在我们之前描述的场景中(请参见 第21.6.5节“准备NDB群集以进行复制”),将执行如下操作:

      shell M>ndb_mgm rep-master:1186 -e "START BACKUP"
      
  2. 将群集备份文件复制到正在联机的从站。每个为主群集运行ndbd进程的系统 都将具有群集备份文件,并且 所有这些文件都必须复制到从服务器以确保成功恢复。备份文件可以复制到从属管理主机所在计算机上的任何目录中,只要MySQL和NDB二进制文件在该目录中具有读取权限即可。在这种情况下,我们将假定这些文件已被复制到目录中 /var/BACKUPS/BACKUP-1

    从机群集不需要具有与主机相同数量的ndbd进程(数据节点)然而,强烈建议这个数字是相同的。必要的,从与启动 --skip-slave-start选项,以防止复制过程中过早启动。

  3. 在主集群上创建要复制到从属设备的从属集群上的任何数据库。

    重要

    CREATE DATABASE(或 CREATE SCHEMA相应于要复制的每个数据库)语句必须从集群中的每个节点SQL上执行。

  4. 在MySQL Monitor中使用以下语句重置从属集群:

    mysql S>RESET SLAVE;
    
  5. 您现在可以使用ndb_restore 命令依次在每个备份文件上启动复制从属服务器上的群集恢复过程对于其中的第一个,需要包含-m恢复群集元数据选项:

    shell S>ndb_restore -c slave_host:port -n node-id \
            -b backup-id -m -r dir
    

    dir是备份文件放置在复制从服务器上的目录的路径。对于ndb_restore对应于剩余的备份文件的命令时, -m应选择使用。

    为了从具有四个数据节点的主群集(如 第21.6节“NDB群集复制”中所示)恢复备份文件已被复制到目录中 /var/BACKUPS/BACKUP-1,要在从服务器上执行的正确命令序列可能看起来像喜欢这个:

    shell S> 
    shell > 
    shell > 
    shell >ndb_restore -c rep-slave:1186 -n 2 -b 1 -m \
            -r ./var/BACKUPS/BACKUP-1Sndb_restore -c rep-slave:1186 -n 3 -b 1 \
            -r ./var/BACKUPS/BACKUP-1Sndb_restore -c rep-slave:1186 -n 4 -b 1 \
            -r ./var/BACKUPS/BACKUP-1Sndb_restore -c rep-slave:1186 -n 5 -b 1 -e \
            -r ./var/BACKUPS/BACKUP-1
    
    重要

    在这个例子中最后调用ndb_restore-e(或 --restore_epoch)选项是必需的,以便将纪元写入从机没有这些信息,从机将无法与主机正确同步。(请参见 第21.4.24节“ ndb_restore - 恢复NDB群集备份”。) mysql.ndb_apply_status

  6. 现在您需要从ndb_apply_status从属表上获取最新纪元 (如 第21.6.8节“使用NDB群集复制实现故障转移”中所述):

    mysql S>SELECT @latest:=MAX(epoch)
            FROM mysql.ndb_apply_status;
    
  7. 使用@latest上一步获得的时代值,可以使用此处显示的查询从主 @pos的正确二进制日志文件中获取正确的起始位置@filemysql.ndb_binlog_index

    mysql M> SELECT
         - >      @file:=SUBSTRING_INDEX(File, '/', -1),
         - >      @pos:=Position
         - > FROM mysql.ndb_binlog_index
         - > WHERE epoch >= @latest
         - >ORDER BY epoch ASC LIMIT 1;
    

    如果当前没有复制流量,则可以通过SHOW MASTER STATUS在主服务器上运行并使用该Position 列中的值来获取此信息,以获取该 列中显示的所有文件的名称具有最大后缀的文件的文件 File但是,在这种情况下,您必须手动确定并在下一步中或通过脚本解析输出来提供。

  8. 使用上一步中获得的值,现在可以CHANGE MASTER TO在slave的mysql 客户端中发出适当的语句

    mysql S> CHANGE MASTER TO
         - >      MASTER_LOG_FILE='@file',
         - >     MASTER_LOG_POS=@pos;
    
  9. 现在,从设备知道从哪个二进制日志文件开始从主设备读取数据,您可以使从设备开始使用此标准MySQL语句进行复制:

    mysql S>START SLAVE;
    

要在第二个复制通道上执行备份和恢复操作,只需要重复这些步骤,在适当的情况下,将主要从属主机和从属机的主机名和ID替换为主要主从机和从属复制服务器的主机名和ID,然后运行上述对他们的陈述。

有关执行群集备份和从备份还原群集的更多信息,请参见 第21.5.3节“NDB群集的联机备份”

21.6.9.1 NDB群集复制:自动将复制从站同步到主二进制日志

可以自动执行上一节中描述的大部分过程(请参见 第21.6.9节“NDB群集复制的NDB群集备份”)。下面的Perl脚本reset-slave.pl可以作为你如何做到这一点的例子。

#!/ user / bin / perl -w

#file:reset-slave.pl

#版权所有©2005 MySQL AB

#这个程序是免费软件; 你可以重新分配和/或修改
#根据GNU通用公共许可证条款发布
#自由软件基金会; 许可证的版本2,或者
#(可选)任何更新的版本。

#这个程序是分发的,希望它会有用,
#但没有任何担保; 甚至没有暗示的保证
适销性或针对特定用途的适用性。看到了
#GNU通用公共许可证了解更多详情。

#您应该收到GNU通用公共许可证的副本
#与这个程序一起; 如果不是,写入:
#自由软件基金会,Inc.
#59寺庙广场,套房330
#Boston,MA 02111-1307 USA
#版本1.1


######################## Includes ######################### ######

使用DBI;

######################## Globals ######################### #######

我的$ m_host ='';
my $ m_port ='';
my $ m_user ='';
我的$ m_pass ='';
我的$ s_host ='';
我的$ s_port ='';
my $ s_user ='';
我的$ s_pass ='';
我的$ dbhM ='';
我的$ dbhS​​ ='';

####################### Sub原型######################### #

sub CollectCommandPromptInfo;
子ConnectToDatabases;
sub DisconnectFromDatabases;
sub GetSlaveEpoch;
sub GetMasterInfo;
子UpdateSlave;

######################## Program Main ######################## ###

CollectCommandPromptInfo;
ConnectToDatabases;
GetSlaveEpoch;
GetMasterInfo;
UpdateSlave;
DisconnectFromDatabases;

##################收集命令提示信息##################

sub CollectCommandPromptInfo
{
  ###检查用户是否提供了正确数量的命令行参数
  死“用法:\ n
       reset-slave>主MySQL主机<>主MySQL端口<\ n
                   >主用户<>主通道<>从属MySQL主机<\ n
                   >从属MySQL端口<>从属用户<>从属关口<\ n
       所有8个参数都必须通过。对空密码使用BLANK \ n“
       除非@ARGV == 8;

  $ m_host = $ ARGV [0];
  $ m_port = $ ARGV [1];
  $ m_user = $ ARGV [2];
  $ m_pass = $ ARGV [3];
  $ s_host = $ ARGV [4];
  $ s_port = $ ARGV [5];
  $ s_user = $ ARGV [6];
  $ s_pass = $ ARGV [7];

  if($ m_pass eq“BLANK”){$ m_pass ='';}
  if($ s_pass eq“BLANK”){$ s_pass ='';}
}

###############建立两个数据库的连接#############

子ConnectToDatabases
{
  ###连接到主和从群集数据库

  ###连接到主
  $ dbhM
    = DBI-> connect(
    “DBI:mysql的:数据库MySQL的=;主持人= $ m_host;港口= $ m_port”
    “$ m_user”,“$ m_pass”)
      或死“无法连接到主集群MySQL进程!
              错误:$ DBI :: errstr \ n“;

  ###连接到从站
  $ dbhS
    = DBI-> connect(
          “DBI:mysql的:数据库MySQL的=;主持人= $ s_host”
          “$ s_user”,“$ s_pass”)
    或死“无法连接到从属群集MySQL进程!
            错误:$ DBI :: errstr \ n“;
}

################断开两个数据库################

子DisconnectFromDatabases
{
  ###断开主站

  $ dbhM->断开
  或警告“断开连接失败:$ DBI :: errstr \ n”;

  ###从奴隶断开

  $ dbhS​​->断开
  或警告“断开连接失败:$ DBI :: errstr \ n”;
}

######################找到最后的好GCI ##################

子GetSlaveEpoch
{
  $ sth = $ dbhS​​-> prepare(“SELECT MAX(epoch)
                         FROM mysql.ndb_apply_status;“)
      或死亡“准备从奴隶选择纪元时出错:”,
             $ dbhS​​-> errstr;

  $ sth->执行
      或死“从奴隶错误选择纪元:”,$ sth-> errstr;

  $ sth-> bind_col(1,\ $ epoch);
  $ sth->获取;
  打印“\ tSlave Epoch = $ epoch \ n”;
  $ sth->完成;
}

#######查找二进制日志中最后一个GCI的位置########

子GetMasterInfo
{
  $ sth = $ dbhM-> prepare(“SELECT
                           SUBSTRING_INDEX(文件,'/',-1),位置
                         FROM mysql.ndb_binlog_index
                         在新纪元> $纪元
                         ORDER BY epoch ASC LIMIT 1;“)
      或死“准备从主错误中选择:”,$ dbhM-> errstr;

  $ sth->执行
      或死“从主错误选择:”,$ sth-> errstr;

  $ sth-> bind_col(1,\ $ binlog);
  $ sth-> bind_col(2,\ $ binpos);
  $ sth->获取;
  打印“\ tMaster二进制日志= $ binlog \ n”;
  打印“\ tMaster二进制日志位置= $ binpos \ n”;
  $ sth->完成;
}

##########将从站设置为从该位置进行处理#########

子UpdateSlave
{
  $ sth = $ dbhS​​-> prepare(“CHANGE MASTER TO
                         MASTER_LOG_FILE = '$二进制日志',
                         MASTER_LOG_POS = $ binpos;“)
      或死“准备改变主错误:”,$ dbhS​​-> errstr;

  $ sth->执行
       或者死于“更改主从机错误:”,$ sth-> errstr;
  $ sth->完成;
  打印“\ tSlave已更新,现在您可以启动从站。\ n”;
}

#结束reset-slave.pl

21.6.9.2使用NDB群集复制的时间点恢复

时间点 恢复 - 即恢复自给定时间点以来所做的数据更改 - 在恢复完整备份后执行,该备份将服务器返回到进行备份时的状态。使用NDB集群和NDB集群复制执行NDB集群表的时间点恢复可以使用本机NDB数据备份(通过发行CREATE BACKUPndb_mgm客户端中发布)并恢复ndb_binlog_index表(使用mysqldump创建的转储

要执行NDB群集的时间点恢复,有必要按照此处显示的步骤进行操作:

  1. NDB使用ndb_mgm客户端中START BACKUP 命令备份群集中的 所有数据库(请参见 第21.5.3节“NDB群集的联机备份”)。

  2. 稍后,在还原群集之前,请备份mysql.ndb_binlog_index 表格。为此任务使用mysqldump可能最简单 此时备份二进制日志文件。

    这个备份应该定期更新 - 可能甚至是每小时 - 取决于您的需求。

  3. 发生灾难性故障或错误。)

  4. 找到最后一次已知的良好备份。

  5. 清除数据节点文件系统(使用 ndbd --initialndbmtd --initial)。

    注意

    NDB集群磁盘数据表空间和日志文件不会被删除--initial您必须手动删除这些。

  6. 使用DROP TABLETRUNCATE TABLEmysql.ndb_binlog_index桌子。

  7. 执行ndb_restore,恢复所有数据。--restore_epoch运行ndb_restore必须包含该 选项,以便 ndb_apply_status表格正确填充。(请参见 第21.4.24节“ ndb_restore” - 恢复NDB群集备份”。)

  8. ndb_binlog_indexmysqldump的输出中 还原如果需要,从并从备份还原二进制日志文件。

  9. 查找最近应用的时期 - 即,中的最大epoch列值 ndb_apply_status表格中 - 作为用户变量@LATEST_EPOCH(强调):

    SELECT @LATEST_EPOCH:= MAX(epoch)
        FROM mysql.ndb_apply_status;
    
  10. 找到最新的二进制日志文件(@FIRST_FILE)及位置(Position该文件对应于中列的值)@LATEST_EPOCHndb_binlog_index表:

    SELECT Position,@FIRST_FILE:=文件
        FROM mysql.ndb_binlog_index
        WHERE epoch> @LATEST_EPOCH ORDER BY epoch ASC LIMIT 1;
    
  11. 使用mysqlbinlog,重播来自给定文件的二进制日志事件并定位到失败点。(请参见第4.6.7节“ mysqlbinlog - 处理二进制日志文件的实用程序”。)

有关二进制日志,复制和增量恢复的更多信息另请参见第7.5节“使用二进制日志进行时间点恢复(增量)”

21.6.10 NDB群集复制:多主复制和循环复制

可以在多主复制中使用NDB群集,包括在多个NDB群集之间进行循环复制。

圆形复制示例。  在接下来的几段中,我们考虑一个涉及三个NDB集群(编号为1,2和3)的复制设置示例,其中集群1充当集群2的复制主节点,集群2充当集群3的主节点,集群3作为群集1的主节点。每个群集有两个SQL节点,其中属于群集1的SQL节点A和B,属于群集2的SQL节点C和D以及属于群集3的SQL节点E和F.

只要满足以下条件,就支持使用这些群集的循环复制:

  • 所有主站和从站上的SQL节点都是相同的

  • 充当复制主节点和从节点的所有SQL节点都使用该--log-slave-updates选项 启动

下图显示了这种类型的循环复制设置:

图21.33 NDB集群循环复制,所有主设备都作为从设备

Content is described in the surrounding text.

在这种情况下,群集1中的SQL节点A将复制到群集2中的SQL节点C; SQL节点C复制到群集3中的SQL节点E; SQL节点E复制到SQL节点A.换句话说,复制行(由图中的红色箭头表示)直接连接用作复制主节点和从节点的所有SQL节点。

也可以设置循环复制,使得并非所有主SQL节点都是从属节点,如下所示:

图21.34不是所有主机都是从机的NDB群集循环复制

Logic is described in the surrounding text. Here SQL node A in Cluster 1 replicates to SQL node C in Cluster 2; SQL node D in Cluster 2 replicates to SQL node F in Cluster 3; SQL node E in Cluster 3 replicates to SQL node B in Cluster 1.

在这种情况下,每个集群中的不同SQL节点都将用作复制主节点和从节点。但是,您 不得使用任何SQL节点启动 --log-slave-updatesNDB Cluster的这种类型的循环复制方案应该是可能的,其中复制线(在图中用红色箭头表示)是不连续的,但应该指出,它尚未经过彻底测试,因此必须仍被认为是实验性的。

使用NDB本地备份和恢复来初始化从NDB群集。  设置循环复制时,可以通过BACKUP在一个NDB群集上使用管理客户端命令来初始化从属 群集来创建备份,然后使用ndb_restore将此备份应用到另一个NDB群集但是,这不会在作为复制从服务器的第二个NDB集群的SQL节点上自动创建二进制日志。为了创建二进制日志,您必须SHOW TABLES在该SQL节点上发出一条 语句; 这应该在运行之前完成 START SLAVE

这是我们打算在未来版本中解决的已知问题。

多主站故障转移示例。  在本节中,我们讨论具有三个NDB群集的多主NDB群集复制设置中的故障转移,其中三个NDB群集具有服务器ID 1,2和3.在此方案中,群集1复制到群集2和群集3; 集群2也复制到集群3.此关系如下所示:

图21.35使用3个主站的NDB群集多主复制

Multi-master NDB Cluster replication setup with three NDB Clusters having server IDs 1, 2, and 3; Cluster 1 replicates to Clusters 2 and 3; Cluster 2 also replicates to Cluster 3.

换句话说,数据通过2种不同的路由从集群1复制到集群3:直接和通过集群2。

并非所有参与多主复制的MySQL服务器都必须同时充当主服务器和从服务器,并且给定的NDB群集可能会针对不同的复制通道使用不同的SQL节点。这里显示了这种情况:

图21.36使用MySQL服务器的NDB群集多主复制

Concepts are described in the surrounding text. Shows three nodes: SQL node A in Cluster 1 replicates to SQL node F in Cluster 3; SQL node B in Cluster 1 replicates to SQL node C in Cluster 2; SQL node E in Cluster 3 replicates to SQL node G in Cluster 3. SQL nodes A and B in cluster 1 have --log-slave-updates=0; SQL nodes C in Cluster 2, and SQL nodes F and G in Cluster 3 have --log-slave-updates=1; and SQL nodes D and E in Cluster 2 have --log-slave-updates=0.

充当复制从服务器的MySQL服务器必须使用该--log-slave-updates选项运行 上图中还显示了哪个 mysqld进程需要此选项。

注意

使用该--log-slave-updates 选项对不作为复制从服务器运行的服务器不起作用。

当其中一个复制簇出现故障时,就会出现故障转移需求。在本例中,我们考虑了集群1失去服务的情况,因此集群3从集群1中丢失了两个更新源。因为NDB集群之间的复制是异步的,所以不能保证集群3的更新直接源自集群1比通过群集2接收到的更新。您可以通过确保群集3跟上群集1的更新来捕获群集2。就MySQL服务器而言,这意味着您需要从MySQL复制任何未完成的更新服务器C到服务器F.

在服务器C上,执行以下查询:

mysqlC> SELECT @latest:= MAX(epoch)
     - > FROM mysql.ndb_apply_status
     - > WHERE server_id = 1;

mysqlC> SELECT
     - > @file:= SUBSTRING_INDEX(File,'/',-1),
     - > @pos:=位置
     - > FROM mysql.ndb_binlog_index
     - > WHERE orig_epoch> = @latest
     - > AND orig_server_id = 1
     - > ORDER BY epoch ASC LIMIT 1;
注意

通过向ndb_binlog_index表中添加适当的索引,可以提高此查询的性能,从而显着加快故障转移时间有关更多信息请参见 第21.6.4节“NDB群集复制架构和表”

复制服务器C到服务器F 的值@file@pos手动(或让您的应用程序执行相同的操作)。然后,在服务器F上执行以下CHANGE MASTER TO语句:

mysqlF> CHANGE MASTER TO
     - > MASTER_HOST ='serverC'
     - > MASTER_LOG_FILE ='@文件',
     - > MASTER_LOG_POS = @ pos;

完成此操作后,您可以START SLAVE在MySQL服务器F上发出 语句,并且源自服务器B的任何缺少的更新将被复制到服务器F.

CHANGE MASTER TO语句还支持一个IGNORE_SERVER_IDS选项,选项使用逗号分隔的服务器ID列表并导致忽略源自相应服务器的事件。有关更多信息,请参见第13.4.2.1节“更改MASTER TO语法”第13.7.5.34节“SHOW SLAVE STATUS语法”有关此选项如何与ndb_log_apply_status变量互动的信息 ,请参见第21.6.8节“使用NDB群集复制实现故障转移”

21.6.11 NDB群集复制冲突解决

当使用涉及多个主设备(包括循环复制)的复制设置时,不同主设备可能尝试使用不同数据更新从设备上的同一行。NDB群集复制中的冲突解决方案通过允许使用用户定义的解决方案列来确定是否应在从属系统上应用给定主机上的更新来解决此类冲突。

通过NDB簇(支持某些类型的冲突解决的NDB$OLD()NDB$MAX()NDB$MAX_DELETE_WIN())实现这种用户定义的列作为时间戳列(虽然它的类型不能为TIMESTAMP,因为在本节后面解释)。这些类型的冲突解决方案始终是逐行应用的,而不是事务性的。基于时代的冲突解决功能 NDB$EPOCH()NDB$EPOCH_TRANS()比较时代复制的顺序(因此这些功能是事务性的)。如本节后面所述,可以使用不同的方法比较发生冲突时从属系统上的分辨率列值; 所使用的方法可以基于每个表来设置。

您还应该记住,应用程序有责任确保解析列正确填充相关值,以便解析功能在决定是否应用更新时能够做出适当的选择。

要求。  解决冲突的准备工作必须在主站和从站上进行。这些任务在下面的列表中描述:

  • 在编写二进制日志的主服务器上,您必须确定发送了哪些列(所有列或只有已更新的列)。这是通过应用mysqld启动选项 --ndb-log-updated-only (本节稍后部分介绍的)或基于表中的条目mysql.ndb_replication(参见ndb_replication系统表)中的条目,为整个MySQL服务器完成的

    注意

    如果要复制具有非常大的列(例如TEXTBLOB列)的表, --ndb-log-updated-only还可以用于减小主二进制日志和从属二进制日志的大小,并避免由于超出而导致可能的复制失败 max_allowed_packet

    有关此问题的更多信息 请参见 第16.4.1.19节“Replication和max_allowed_pa​​cket”

  • 在奴隶上,您必须确定应用哪种类型的冲突解决方案(最新时间戳获胜相同时间戳获胜主要胜利主要胜利,完成事务或无)。这是使用 mysql.ndb_replication系统表在每个表的基础上完成的(请参阅 ndb_replication系统表)。

  • NDB集群还支持读取冲突检测,即检测一个集群中给定行的读取之间的冲突,以及更新或删除另一个集群中同一行的冲突。这需要通过ndb_log_exclusive_reads在从站上设置等于1来获得独占读锁 由冲突读取读取的所有行都记录在例外表中。有关更多信息,请参阅 读取冲突检测和解决

当使用函数NDB$OLD()NDB$MAX()以及 NDB$MAX_DELETE_WIN()基于时间戳的冲突解决方案时,我们经常将用于确定更新的列引用为时间戳列。但是,该列的数据类型永远不会 TIMESTAMP; 相反,其数据类型应该是INTINTEGER)或 BIGINT时间戳栏也应 UNSIGNEDNOT NULL

NDB$EPOCH()NDB$EPOCH_TRANS()通过比较复制历元的相对顺序在本节后面工作讨论的功能施加在初级和次级NDB簇,和不利用时间戳。

主列控制。  我们可以根据之前之后图像查看更新操作- 即应用更新之前和之后的表的状态。通常,当用主键更新表格时,之前 图像不是很感兴趣; 但是,当我们需要根据每更新的基础确定是否在复制从属设备上使用更新的值时,我们需要确保将这两个映像写入主设备的二进制日志。这是通过mysqld--ndb-log-update-as-write选项完成的 ,如本节后面所述。

重要

是否完成整行或更新列的记录是在MySQL服务器启动时决定的,并且不能在线更改; 您必须重新启动 mysqld,或者使用不同的日志记录选项启动一个新的 mysqld实例。

记录完整或部分行(--ndb-log-updated-only选项)

属性
命令行格式 --ndb-log-updated-only
系统变量 ndb_log_updated_only
范围 全球
动态
类型 布尔
默认 ON

为了解决冲突,有两种记录行的基本方法,这取决于mysqld--ndb-log-updated-only选项 的设置

  • 记录完整的行

  • 只记录已更新的列数据 - 即已设置其值的列数据,而不管该值是否实际更改。这是默认行为。

通常只需记录更新的列即可 - 而且更高效 - 但是,如果您需要记录完整行,则可以通过设置 --ndb-log-updated-only0或来完成OFF

--ndb-log-update-as-write选项:将更改的数据记录为更新

属性
命令行格式 --ndb-log-update-as-write
系统变量 ndb_log_update_as_write
范围 全球
动态
类型 布尔
默认 ON

MySQL服务器--ndb-log-update-as-write选项的设置 决定了使用或不使用之前映像执行日志记录 由于冲突解决是在MySQL服务器的更新处理程序中完成的,因此有必要控制主服务器上的日志记录,以便更新是更新而不是写入; 也就是说,更新被视为现有行中的更改,而不是写入新行(即使这些行替换了现有行)。该选项默认打开; 换句话说,更新被视为写入。(也就是说,更新默认情况下是write_row在二进制日志中写入事件,而不是update_row 事件。)

要关闭该选项,请 使用启动主mysqld使用不同的存储引擎将NDB表复制到表时,您必须执行此操作; 有关更多信息,请参阅 从NDB到其他存储引擎的复制以及 从NDB到非事务性存储引擎的复制--ndb-log-update-as-write=0--ndb-log-update-as-write=OFF

冲突解决控制。  冲突解决通常在可能发生冲突的服务器上启用。与日志记录方法选择一样,它由表中的条目启用 mysql.ndb_replication

ndb_replication系统表。  要启用冲突解决方案,必须根据冲突解决方案类型和要使用的方法,在主系统,从属系统或两者上ndb_replicationmysql系统数据库中创建一个 该表用于在每个表的基础上控制日志记录和冲突解决功能,并且每个表都有一行涉及复制。 ndb_replication在需要解决冲突的服务器上创建并填充控制信息。在一个简单的主从设置中,数据也可以在从机上进行本地修改,通常它是从机。在一个更复杂的主 - 主(双向)复制模式中,通常会涉及所有主模块。中的每一行 mysql.ndb_replication对应于正在复制的表,并指定如何记录和解决该表的冲突(即,使用哪种冲突解决功能)。mysql.ndb_replication表格的定义 如下所示:

CREATE TABLE mysql.ndb_replication(
    db VARBINARY(63),
    table_name VARBINARY(63),
    server_id INT UNSIGNED,
    binlog_type INT UNSIGNED,
    conflict_fn VARBINARY(128),
    PRIMARY KEY使用HASH(db,table_name,server_id)
)ENGINE = NDB
PARTITION BY KEY(db,table_name);

接下来的几段将介绍这个表中的列。

D b。  包含要复制的表的数据库的名称。您可以使用通配符中的一个或两个, _并将其%作为数据库名称的一部分。匹配与LIKE运营商实施的相似

TABLE_NAME。  要复制的表的名称。表名称可以包含通配符的一个或两个_%匹配与LIKE运营商实施的相似

SERVER_ID。  表所在的MySQL实例(SQL节点)的唯一服务器标识。

binlog_type。  二进制日志记录的类型。这如下表所示确定:

表21.400 binlog_type值,包含内部值和说明

内部价值 描述
0 NBT_DEFAULT 使用服务器默认
1 NBT_NO_LOGGING 不要将此表记录在二进制日志中
2 NBT_UPDATED_ONLY 只记录更新的属性
3 NBT_FULL 记录全行,即使没有更新(MySQL服务器默认行为)
4 NBT_USE_UPDATE 用于生成NBT_UPDATED_ONLY_USE_UPDATENBT_FULL_USE_UPDATE值 - 不用于单独使用)
[ 未使用 ] ---
6 NBT_UPDATED_ONLY_USE_UPDATE(等于 NBT_UPDATED_ONLY | NBT_USE_UPDATE 使用更新的属性,即使值不变
7 NBT_FULL_USE_UPDATE(等于NBT_FULL | NBT_USE_UPDATE 使用整行,即使值不变

conflict_fn。  要应用的冲突解决功能。该功能必须指定为以下列表中显示的功能之一:

这些功能在接下来的几段中描述。

NDB $ OLD(列)。  如果column_name主站和从站的值相同,则应用更新; 否则,更新不会应用于从站,并且会在日志中写入异常。这由以下伪代码来说明:

如果(master_old_column_value== slave_current_column_value
  应用更新();
其他
  log_exception();

此功能可用于相同价值赢 冲突解决方案。这种类型的冲突解决方案可确保更新不会应用于来自错误主机的从属设备。

重要

该函数使用主 图像之前的列值

NDB $ MAX(列)。  如果来自主设备的给定行时间戳列值高于从设备,则会应用该值; 否则它不适用于从站。这由以下伪代码来说明:

如果(master_new_column_value> slave_current_column_value
  应用更新();

此功能可用于最大时间戳获胜冲突解决方案。这种类型的冲突解决可确保在发生冲突时,最近更新的行的版本是持续存在的版本。

重要

该函数使用主 图像图像的列值

NDB $ MAX_DELETE_WIN()。  这是一个变化NDB$MAX()由于没有时间戳可用于删除操作,因此使用删除NDB$MAX()事实上被处理为NDB$OLD但是,对于一些使用情况,这不是最佳的。因为NDB$MAX_DELETE_WIN(),如果添加或更新来自主设备的现有行的给定行时间戳列值高于从设备,则会应用此列。但是,删除操作被视为始终具有较高的值。这在下面的伪码中说明:

如果((master_new_column_value> slave_current_column_value
        ||
      operation.type ==“删除”)
  应用更新();

此功能可用于最大时间戳,删除胜利冲突解决方案。这种类型的冲突解决方案可确保在发生冲突时,最近更新或删除的(或以其他方式)行的版本是持续存在的版本。

注意

与之一样NDB$MAX(),主图像之后的列值是该函数使用的值。

NDB $ EPOCH()和NDB $ EPOCH_TRANS()。  NDB$EPOCH()功能跟踪从属NDB集群上应用复制历元的次序,与从属于源的变化相关。这种相对排序用于确定源于从属设备的更改是否与源自本地的任何更改并发,因此可能存在冲突。

以下描述中的大部分内容 NDB$EPOCH()也适用于 NDB$EPOCH_TRANS()文中注明了任何例外情况。

NDB$EPOCH()是非对称的,在两个群集的循环复制配置(有时称为主动 - 主动 复制)中的一个NDB群集上运行我们在这里指的是它作为主要组织运行的集群,另一个作为次要集群。主服务器上的从服务器负责检测和处理冲突,而辅助服务器上的从服务器不参与任何冲突检测或处理。

当主站上的从站检测到冲突时,它会将事件注入到它自己的二进制日志中以补偿这些事件; 这可以确保次要NDB群集最终与主要群体重新进行自我调整,从而使主要和次要群体不会发生分歧。这种补偿和重新调整机制要求主要NDB群集始终赢得与次要服务器的任何冲突 - 也就是说,如果发生冲突,主要服务器的更改总是被使用,而不是来自次要服务器的更改。这个主要总是胜利规则具有以下含义:

  • 一旦在主服务器上提交数据,更改数据的操作将完全保留,并且不会因冲突检测和解决而撤销或回退。

  • 从主数据中读取的数据完全一致。在主服务器(本地或从服务器)上提交的任何更改将不会在稍后恢复。

  • 如果主服务器确定他们存在冲突,那么更改辅助服务器上数据的操作可能会稍后恢复。

  • 在辅助节点上读取的单独行在任何时候都是自洽的,每一行总是反映由辅助节点承担的状态,还是由主节点承担的状态。

  • 在辅助中读取的行集可能不一定在给定的单个时间点上一致。因为 NDB$EPOCH_TRANS(),这是一个暂时的状态; 因为NDB$EPOCH(),它可以是一个持久的状态。

  • 假设足够长的时间段没有任何冲突,则辅助NDB群集(最终)上的所有数据都会与主数据保持一致。

NDB$EPOCH()并且 NDB$EPOCH_TRANS()不需要任何用户架构修改或应用程序更改来提供冲突检测。但是,必须仔细考虑所使用的模式以及所使用的访问模式,以验证整个系统在指定限制内​​的行为。

每个NDB$EPOCH()NDB$EPOCH_TRANS()函数都可以带一个可选参数; 这是用于表示历元的低32位的位数,应该设置为不小于

CEIL(LOG2(TimeBetweenGlobalCheckpoints/ TimeBetweenEpochs),1)

对于这些配置参数(2000和100毫秒,分别地)的默认值,这给5个比特的值,所以默认值(6)应是足够的,除非其它值被用于 TimeBetweenGlobalCheckpointsTimeBetweenEpochs或两者。太小的值可能会导致误报,而太大的值可能会导致数据库中浪费过多的空间。

双方NDB$EPOCH()NDB$EPOCH_TRANS()插入了冲突行到相关的例外表中的条目,前提是这些表根据在本节别处描述的相同例外表架构规则被定义(见NDB $ OLD(列))。在创建要使用的表之前,您需要创建任何例外表。

与本节中讨论的其他冲突检测功能一样,NDB$EPOCH()NDB$EPOCH_TRANS()通过在mysql.ndb_replication 表中包含相关条目来激活(请参阅ndb_replication系统表)。在这种情况下,主NDB集群和辅助NDB集群的角色完全由mysql.ndb_replication表条目确定

由于冲突检测算法采用 NDB$EPOCH()并且 NDB$EPOCH_TRANS()是不对称的,因此您必须为主要从属设备和从属设备的server_id条目使用不同的值

DELETE单独的操作 之间的冲突不足以引发使用NDB$EPOCH()的冲突 NDB$EPOCH_TRANS(),并且在时期内的相对放置无关紧要。(错误#18459944)

冲突检测状态变量。  可以使用多个状态变量来监视冲突检测。您可以看到发生冲突的行数,NDB$EPOCH()因为此从属系统最近从Ndb_conflict_fn_epoch系统状态变量的当前值重新启动

Ndb_conflict_fn_epoch_trans 提供直接冲突发现的行数NDB$EPOCH_TRANS()Ndb_conflict_fn_epoch2Ndb_conflict_fn_epoch2_trans 表示在冲突中的行数 NDB$EPOCH2()NDB$EPOCH2_TRANS()分别。实际重新排列的行数,包括由于其成员或依赖于与其他冲突行相同的事务而受到影响的行数,由下式给出 Ndb_conflict_trans_row_reject_count

有关更多信息,请参见 第21.3.3.9.3节“NDB群集状态变量”

NDB $ EPOCH()的限制。  NDB$EPOCH()用于执行冲突检测时,以下限制适用

  • 使用NDB Cluster时元边界检测冲突,粒度与TimeBetweenEpochs (默认:100毫秒)成比例 最小冲突窗口是两个群集上同一数据的并发更新始终报告冲突的最短时间。这总是一个非零的时间长度,并且大致与此成正比 2 * (latency + queueing + TimeBetweenEpochs)这意味着 - 假定默认值 TimeBetweenEpochs并忽略群集之间的任何延迟(以及任何排队延迟) - 最小冲突窗口大小约为200毫秒。在查看预期应用程序比赛时应该考虑这个最小窗口 图案。

  • 使用NDB$EPOCH()NDB$EPOCH_TRANS()函数的表格需要额外的存储空间 ; 从1到32位需要额外的每行空间,具体取决于传递给函数的值。

  • 删除操作之间的冲突可能导致主要和次要之间的分歧。当同时在两个群集上删除一行时,可以检测到冲突,但不会被记录,因为该行被删除。这意味着在传播任何后续重组操作期间的进一步冲突将不会被检测到,这可能导致分歧。

    删除应该从外部序列化,或者仅路由到一个群集。或者,应该使用这种删除和跟随它们的任何插入事务来更新单独的行,以便跨行删除可以跟踪冲突。这可能需要更改应用程序。

  • 当使用用于冲突检测时,目前 仅支持两个圆形主动 - 主动配置中的NDB群集 NDB$EPOCH()NDB$EPOCH_TRANS()

  • 为表BLOBTEXT列目前没有与任何支持NDB$EPOCH()NDB$EPOCH_TRANS()

NDB $ EPOCH_TRANS()。  NDB$EPOCH_TRANS()扩展 NDB$EPOCH()功能。使用主要所有规则(请参阅 NDB $ EPOCH()和NDB $ EPOCH_TRANS()检测和处理冲突的方式相同,但有额外的条件,即在发生冲突的同一事务中更新了其他任何行也被视为有冲突。换句话说,在NDB$EPOCH()次要位置 重新排列个别冲突行,NDB$EPOCH_TRANS() 重新对齐冲突事务。

另外,任何可检测地依赖冲突事务的事务也被认为是冲突的,这些依赖性由辅助集群的二进制日志的内容决定。由于二进制日志仅包含数据修改操作(插入,更新和删除),因此仅使用重叠数据修改来确定事务之间的依赖关系。

NDB$EPOCH_TRANS()受到与之相同的条件和限制NDB$EPOCH(),并且此外还要求使用Version 2二进制日志行事件(--log-bin-use-v1-row-events等于0),这会在二进制日志中增加每个事件2个字节的存储开销。另外,所有事务ID都必须记录在辅助节点的二进制日志(--ndb-log-transaction-id选项)中,这会增加进一步的变量开销(每行最多13个字节)。

参见NDB $ EPOCH()和NDB $ EPOCH_TRANS()

状态信息。  服务器状态变量 Ndb_conflict_fn_max提供了 自上次启动mysqld以来由于最大时间戳获胜冲突解决 而导致当前SQL节点上未应用某行的次数

自上次重新启动以来, 由于相同时间戳记而未应用行的次数 在给定mysqld上的冲突解决方案 由全局状态变量给出 Ndb_conflict_fn_old除了递增之外 Ndb_conflict_fn_old,未使用的行的主键被插入到 异常表中,如本节后面所述。

NDB $ EPOCH2()。  NDB$EPOCH2()功能类似于 NDB$EPOCH(),除了 NDB$EPOCH2()提供使用循环复制(主 - 主)拓扑的删除 - 删除处理外在这种情况下,初级和次级的作用通过设置分配给所述两个主 ndb_slave_conflict_role系统变量为适当的值上的每个主站(每个通常是一个PRIMARYSECONDARY)。完成后,由辅助设备进行的修改由辅助设备反映到备用设备,然后有条件地应用它们。

NDB $ EPOCH2_TRANS()。  NDB$EPOCH2_TRANS()扩展 NDB$EPOCH2()功能。以相同的方式检测并处理冲突,并将主角色和次角色分配给复制群集,但是有额外的条件,即在发生冲突的同一事务中更新的任何其他行也被视为冲突。也就是说,NDB$EPOCH2()重新排列辅助服务器上各个冲突的行,同时 NDB$EPOCH_TRANS()重新对齐冲突的事务。

哪里NDB$EPOCH()哪里NDB$EPOCH_TRANS()使用每行指定的元数据(按最后一个修改时期),在主数据库上确定来自辅助节点的传入复制行更改是否与本地提交的更改并发; 并发更改被认为是冲突的,随后的异常表更新和次要的重新对齐。在主节点上删除一行时会出现问题,因此不再有可用于确定是否有任何复制操作冲突的最后修改历元,这意味着未检测到冲突的删除操作。这可能会导致分歧,例如,一个集群上的删除与另一个集群中的删除和插入同时发生; 这就是为什么使用时删除操作只能路由到一个群集的原因 NDB$EPOCH()NDB$EPOCH_TRANS()

NDB$EPOCH2()绕过刚刚描述的问题 - 通过忽略任何删除 - 删除冲突并通过避免任何可能的结果分歧来在PRIMARY上存储关于删除的行的信息。这是通过反映任何成功应用于第二级的操作并将其从第二级复制到第二级来完成的。在它返回到辅助节点时,它可以用于重新应用辅助节点上的操作,该辅助节点已经由源自主节点的操作删除。

使用时NDB$EPOCH2(),应该记住,辅助应用从主服务器删除,删除新的行,直到通过反射操作恢复。从理论上讲,随后插入或更新的次要冲突与从主要删除,但在这种情况下,我们选择忽略此,并允许次要 这是为了防止集群之间的分歧。换句话说,删除后,主服务器不会检测到冲突,而是立即采用次服务器的以下更改。正因为如此,当它进展到最终(稳定)状态时,辅助状态可以重新访问多个先前承诺的状态,其中一些状态可能是可见的。

您还应该意识到,反映从辅助服务器到主服务器的所有操作都会增加主服务器的日志记录日志的大小,以及对带宽,CPU使用率和磁盘I / O的需求。

在二级应用反射操作取决于二级目标行的状态。通过检查Ndb_conflict_reflected_op_prepare_countNdb_conflict_reflected_op_discard_count 状态变量可以跟踪是否在辅助中应用反映的更改 所应用的更改数量仅仅是这两个值之间的差异(请注意 Ndb_conflict_reflected_op_prepare_count总是大于或等于 Ndb_conflict_reflected_op_discard_count)。

当且仅当满足以下两个条件时才应用事件:

  • 行的存在 - 也就是说它是否存在 - 与事件的类型一致。对于删除和更新操作,该行必须已经存在; 对于插入操作,该行不能 存在。

  • 该行最后由主要修改。修改可能是通过执行反射操作来完成的。

如果两个条件均不满足,则反映的操作将被辅助设备丢弃。

冲突解决例外表。  要使用NDB$OLD()冲突解决功能,还需要创建NDB与要使用此类冲突解决方案的每个对应的例外表在使用NDB$EPOCH()or 时也是如此NDB$EPOCH_TRANS()此表的名称是要应用冲突解决方案的表的名称,并$EX附加了字符串(例如,如果原始表的 mytable名称应该是相应的异常表名称的名称mytable$EX。)创建异常表的语法如下所示:

CREATE TABLE original_table$ EX(
    [NDB $] server_id INT UNSIGNED,
    [NDB $] master_server_id INT UNSIGNED,
    [NDB $] master_epoch BIGINT UNSIGNED,
    [NDB $]计数INT UNSIGNED,

    [NDB $ OP_TYPE ENUM('WRITE_ROW','UPDATE_ROW','DELETE_ROW',
      'REFRESH_ROW','READ_ROW')NOT NULL,]
    [NDB $ CFT_CAUSE ENUM('ROW_DOES_NOT_EXIST','ROW_ALREADY_EXISTS',
      'DATA_IN_CONFLICT','TRANS_IN_CONFLICT')NOT NULL,]
    [NDB $ ORIG_TRANSID BIGINT UNSIGNED NOT NULL,]

    original_table_pk_columns

    [ orig_table_column| orig_table_column$ OLD | orig_table_column$新]

    [ additional_columns,]

    PRIMARY KEY([NDB $] server_id,[NDB $] master_server_id,[NDB $] master_epoch,[NDB $]计数)
)ENGINE = NDB;

前四列是必需的。前四列和与原始表的主键列匹配的列的名称并不重要; 然而,我们建议为了清楚和一致的原因,您使用这里显示的名字 server_idmaster_server_idmaster_epoch,和count 列,并使用相同的名称作为原始表匹配那些在原表的主键列。

如果异常表使用一个或多个可选列 NDB$OP_TYPENDB$CFT_CAUSE或者NDB$ORIG_TRANSID在本节稍后讨论,那么每个必需列也必须使用前缀命名NDB$如果需要,NDB$即使未定义任何可选列,也可以使用前缀来命名所需列,但在这种情况下,必须使用前缀命名全部四个必需列。

在这些列之后,构成原始表主键的列应按照它们用于定义原始表的主键的顺序进行复制。复制原始表的主键列的列的数据类型应与原始列的数据类型相同(或大于)。可以使用主键列的子集。

无论采用哪种NDB集群版本,异常表都必须使用NDB存储引擎。NDB$OLD()本节稍后会显示一个与异常表一起使用的示例。)

可以选择在复制的主键列之后定义附加列,但不能在其中任何一列之前定义; 任何这样的额外的列不能NOT NULLNDB Cluster支持三个额外的,预定义的可选列 NDB$OP_TYPENDB$CFT_CAUSENDB$ORIG_TRANSID,这在接下来的几个段落中。

NDB$OP_TYPE:此列可用于获取导致冲突的操作类型。如果您使用此列,请按以下所示对其进行定义:

NDB $ OP_TYPE ENUM('WRITE_ROW','UPDATE_ROW','DELETE_ROW',
    'REFRESH_ROW','READ_ROW')NOT NULL

WRITE_ROWUPDATE_ROWDELETE_ROW操作类型表示用户启动的操作。REFRESH_ROW 操作是通过冲突解决生成的操作,用于补偿从检测到冲突的群集发回原始群集的事务。 READ_ROW操作是用专用行锁定定义的用户启动的读取跟踪操作。

NDB$CFT_CAUSE:您可以定义一个可选列NDB$CFT_CAUSE,它提供注册冲突的原因。如果使用此列,则按此处所示进行定义:

NDB $ CFT_CAUSE ENUM('ROW_DOES_NOT_EXIST','ROW_ALREADY_EXISTS',
    'DATA_IN_CONFLICT','TRANS_IN_CONFLICT')NOT NULL

ROW_DOES_NOT_EXIST可以作为原因UPDATE_ROWWRITE_ROW 操作进行报告; ROW_ALREADY_EXISTS可以报​​告WRITE_ROW事件。 DATA_IN_CONFLICT在基于行的冲突函数检测到冲突时被报告; TRANS_IN_CONFLICT会在事务性冲突函数拒绝属于完整事务的所有操作时被报告。

NDB$ORIG_TRANSID:该 NDB$ORIG_TRANSID列(如果使用)包含发起事务的标识。这一栏应该定义如下:

NDB $ ORIG_TRANSID BIGINT UNSIGNED NOT NULL

NDB$ORIG_TRANSID是由生成的64位值 NDB此值可用于将属于同一冲突事务的多个例外表条目与相同或不同的例外表关联起来。

不属于原始表主键的其他引用列可以被命名为 colname$OLDcolname$NEWcolname$OLD 在更新和删除操作中引用旧值 - 即包含DELETE_ROW事件的操作colname$NEW可用于在插入和更新操作中引用新值 - 换句话说,使用 WRITE_ROW事件,UPDATE_ROW 事件或两种类型的事件进行操作。如果冲突操作未为给定的非主键引用列提供值,那么异常表行将包含 NULL该列的一个或定义的默认值。

重要

mysql.ndb_replication为复制设置数据表时读取表,因此与要复制的表对应的行必须在创建要复制的表mysql.ndb_replication 之前插入到 该表中。

例子

以下示例假定您已经有一个正在工作的NDB群集复制设置,如 第21.6.5节“准备NDB群集以进行复制”第21.6.6节“启动NDB群集复制(单一复制通道)”中所述

NDB $ MAX()示例。  假设您希望在表上启用最大时间戳获胜冲突解决方案 test.t1,并使用列 mycol作为时间戳这可以使用以下步骤完成:

  1. 请确保您已经启动了主 的mysqld--ndb-log-update-as-write=OFF

  2. 在master上,执行以下 INSERT语句:

    INSERT INTO mysql.ndb_replication
        VALUES('test','t1',0,NULL,'NDB $ MAX(mycol)');
    

    将0插入 server_id表示访问此表的所有SQL节点应使用冲突解决方案。如果您只想在特定的mysqld上使用冲突解决方案 ,请使用实际的服务器ID。

    插入NULL到所述 binlog_type列具有作为插入0(相同的效果NBT_DEFAULT); 使用服务器默认值。

  3. 创建test.t1表格:

    CREATE TABLE test.t1(
        columns
        mycol INT UNSIGNED,
        columns
    )ENGINE = NDB;
    

    现在,在此表上进行更新时,将应用冲突解决方案,并将具有最大值的行的版本mycol写入从属设备。

注意

其他binlog_type选项 - 例如 NBT_UPDATED_ONLY_USE_UPDATE应该用来控制使用ndb_replication表格而不是使用命令行选项的主记录

NDB $ OLD()示例。  假设NDB这里定义表格正在被复制,并且您希望为此表的更新启用 相同时间戳获胜冲突解决方案:

CREATE TABLE test.t2(
    INT UNSIGNED NOT NULL,
    b CHAR(25)NOT NULL,
    columns
    mycol INT UNSIGNED NOT NULL,
    columns
    PRIMARY KEY pk(a,b)
)ENGINE = NDB;

按所示顺序需要执行以下步骤:

  1. 首先 - 创建 之前test.t2 - 您必须在mysql.ndb_replication 表格中插入一行 ,如下所示:

    INSERT INTO mysql.ndb_replication
        VALUES('test','t2',0,NULL,'NDB $ OLD(mycol)');
    

    binlog_type本节前面显示 了该列的可能值该值 'NDB$OLD(mycol)'应该插入到conflict_fn列中。

  2. 为...创建适当的例外表 test.t2此处显示的表创建语句包含所有必需的列; 必须在这些列之后并且在表的主键定义之前声明任何附加列。

    CREATE TABLE test.t2 $ EX(
        server_id INT UNSIGNED,
        master_server_id INT UNSIGNED,
        master_epoch BIGINT UNSIGNED,
        计数INT UNSIGNED,
        INT UNSIGNED NOT NULL,
        b CHAR(25)NOT NULL,
    
        [ additional_columns,]
    
        PRIMARY KEY(server_id,master_server_id,master_epoch,count)
    )ENGINE = NDB;
    

    我们可以在其他列中包含有关给定冲突的类型,原因和原始事务ID的信息。我们也不需要为原始表中的所有主键列提供匹配列。这意味着你可以像这样创建异常表:

    CREATE TABLE test.t2 $ EX(
        NDB $ server_id INT UNSIGNED,
        NDB $ master_server_id INT UNSIGNED,
        NDB $ master_epoch BIGINT UNSIGNED,
        NDB $ count INT UNSIGNED,
        INT UNSIGNED NOT NULL,
      
        NDB $ OP_TYPE ENUM('WRITE_ROW','UPDATE_ROW','DELETE_ROW',
          'REFRESH_ROW','READ_ROW')NOT NULL,
        NDB $ CFT_CAUSE ENUM('ROW_DOES_NOT_EXIST','ROW_ALREADY_EXISTS',
          'DATA_IN_CONFLICT','TRANS_IN_CONFLICT')NOT NULL,
        NDB $ ORIG_TRANSID BIGINT UNSIGNED NOT NULL,
    
        [ additional_columns,]
    
        PRIMARY KEY(NDB $ server_id,NDB $ master_server_id,NDB $ master_epoch,NDB $ count)
    )ENGINE = NDB;
    
    注意

    NDB$前缀是必需的四个必需列,因为我们包括列的至少一个NDB$OP_TYPENDB$CFT_CAUSENDB$ORIG_TRANSID在表定义。

  3. test.t2如前所示 创建表格

对于您希望使用其执行冲突解决的每个表,必须遵循这些步骤NDB$OLD()对于每个这样的表,必须有一个对应的行 mysql.ndb_replication,并且必须在与正在复制的表相同的数据库中有一个异常表。

读取冲突检测和解决。  NDB群集还支持跟踪读取操作,这使得在循环复制设置中可以管理一个群集中给定行的读取之间的冲突,以及更新或删除另一个群集中同一行的冲突。本例中使用 employee,并department 表,其中员工移动从一个部门到另一个主群集上(我们称之为以下简称集群中的场景模型),而从群集(以下称)更新员工的前者的员工数量部门在一个交错的交易。

数据表已使用以下SQL语句创建:

#员工表
CREATE TABLE员工(
    ID INT PRIMARY KEY,
    名称VARCHAR(2000),
    dept INT NOT NULL
)ENGINE = NDB;

#部门表
CREATE TABLE部门(
    ID INT PRIMARY KEY,
    名称VARCHAR(2000),
    成员INT
)ENGINE = NDB;

这两个表的内容包括以下SELECT语句的(部分)输出中显示的行

MySQL的> SELECT id, name, dept FROM employee;
+ --------------- + ------ +
| id | 名称| 部门|
+ ------ + -------- + ------ +
...
| 998 | 迈克| 3 |
| 999 | 乔| 3 |
| 1000 | Mary | 3 |
...
+ ------ + -------- + ------ +

MySQL的> SELECT id, name, members FROM department;
+ ----- + ------------- + --------- +
| id | 名称| 成员|
+ ----- + ------------- + --------- +
...
| 3 | 旧项目| 24 |
...
+ ----- + ------------- + --------- +

我们假设我们已经在使用一个异常表,它包括四个必需的列(这些列用于此表的主键),操作类型和原因的可选列以及使用SQL语句创建的原始表的主键列如下所示:

CREATE TABLE employee $ EX(
    NDB $ server_id INT UNSIGNED,
    NDB $ master_server_id INT UNSIGNED,
    NDB $ master_epoch BIGINT UNSIGNED,
    NDB $ count INT UNSIGNED,

    NDB $ OP_TYPE ENUM('WRITE_ROW','UPDATE_ROW','DELETE_ROW',
                      'REFRESH_ROW','READ_ROW')NOT NULL,
    NDB $ CFT_CAUSE ENUM('ROW_DOES_NOT_EXIST',
                        'ROW_ALREADY_EXISTS',
                        'DATA_IN_CONFLICT',
                        'TRANS_IN_CONFLICT')NOT NULL,

    id INT NOT NULL,
                  
    PRIMARY KEY(NDB $ server_id,NDB $ master_server_id,NDB $ master_epoch,NDB $ count)
)ENGINE = NDB;

假设在两个集群上发生两个同时事务。在集群A上,我们创建了一个新部门,然后使用以下SQL语句将员工编号999移动到该部门中:

BEGIN;
  INSERTINTO部门VALUES(4,“新项目”,1);    
  UPDATE员工设置部门= 4 WHERE ID = 999;
承诺;

同时,在集群B上,另一个事务读取employee,如下所示:

开始;
  SELECT name FROM employee WHERE id = 999;
  UPDATE department SET members = members  -  1 WHERE id = 3;
承诺;

冲突解决机制通常不会检测到冲突事务,因为冲突介于read(SELECT)和update操作之间。您可以通过在从集群上执行来绕过此问题 以这种方式获取独占读取锁定会导致在主节点上读取的任何行被标记为需要从属群集上的冲突解决。如果我们在记录这些事务之前以这种方式启用独占读取,那么集群B上的读取被跟踪并发送到集群A以进行解析; 将检测员工行中的冲突,并且集群B上的事务被中止。 SET ndb_log_exclusive_reads = 1

冲突在异常表(在集群 A上)中作为READ_ROW操作注册(请参阅冲突解决异常表,有关操作类型的描述),如下所示:

MySQL的> SELECT id, NDB$OP_TYPE, NDB$CFT_CAUSE FROM employee$EX;
+ ------- + ------------- + ------------------- +
| id | NDB $ OP_TYPE | NDB $ CFT_CAUSE |
+ ------- + ------------- + ------------------- +
...
| 999 | READ_ROW | TRANS_IN_CONFLICT |
+ ------- + ------------- + ------------------- +

在读操作中找到的任何现有行都会被标记。这意味着可以在异常表中记录由相同冲突产生的多行,如通过检查集群A上的更新同时事务中同一表集群B上读取多行的行为之间的冲突所显示的那样在集群A上执行的事务如下所示:

开始;
  插入部门VALUES(4,“新项目”,0);    
  UPDATE employee SET dept = 4 WHERE dept = 3;
  SELECT COUNT(*)INTO @count FROM employee WHERE dept = 4;
  更新部门SET成员= @count WHERE id = 4;
承诺;

同时包含此处显示的语句的事务在群集B上运行

SET ndb_log_exclusive_reads = 1; #如果尚未启用,则必须设置
...
开始;
  SELECT COUNT(*)INTO @count FROM employee WHERE dept = 3 FOR UPDATE;
  UPDATE department SET members = @count WHERE id = 3;
承诺;

在这种情况下,将读取WHERE 与第二个事务中的条件 匹配的所有三行SELECT,并在异常表中进行标记,如下所示:

MySQL的> SELECT id, NDB$OP_TYPE, NDB$CFT_CAUSE FROM employee$EX;
+ ------- + ------------- + ------------------- +
| id | NDB $ OP_TYPE | NDB $ CFT_CAUSE |
+ ------- + ------------- + ------------------- +
...
| 998 | READ_ROW | TRANS_IN_CONFLICT |
| 999 | READ_ROW | TRANS_IN_CONFLICT |
| 1000 | READ_ROW | TRANS_IN_CONFLICT |
...
+ ------- + ------------- + ------------------- +

只在现有行的基础上执行读取跟踪。基于给定条件跟踪的读取仅会冲突找到的任何行,而不会冲突插入交叉事务中的任何行。这与如何在单个NDB群集实例中执行排它行锁定类似。

21.7 NDB集群发行说明

NDB集群版本的更改与本参考手册分开记录; 您可以在NDB 7.5发行说明中的每个NDB Cluster 7.5发行 以及NDB 7.6发行说明中的每个NDB Cluster 7.6发行版中找到 发行说明

您可以从NDB群集版本说明获取NDB群集早期版本的 发行说明

原文